159 Stimmen

Wie kann man herausfinden, welche Zeichentaste gedrückt wurde?

Ich möchte gerne herausfinden, welche Zeichentaste auf eine browserübergreifende Weise in reinem Javascript gedrückt wird.

2 Stimmen

Sind nicht alle diese Antworten auf die Frage "welcher Schlüssel fue gedrückt?" Was ist, wenn der Javascript-Code während der Ausführung wissen will, ob eine Taste auf der Tastatur gerade gedrückt ist?

5 Stimmen

event.key gibt Ihnen direkt das gepresste Zeichen

191voto

Coyod Punkte 2548

JavaScript "Löschen":

function myKeyPress(e){
  var keynum;

  if(window.event) { // IE                  
    keynum = e.keyCode;
  } else if(e.which){ // Netscape/Firefox/Opera                 
    keynum = e.which;
  }

  alert(String.fromCharCode(keynum));
}

<input type="text" onkeypress="return myKeyPress(event)" />

JQuery:

$("input").keypress(function(event){
  alert(String.fromCharCode(event.which)); 
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input/>

8 Stimmen

Dies funktioniert gut für alphabetische Zeichen, aber was ist mit Punkten/Blöcken und anderen typogtaphischen Zeichen?

7 Stimmen

@VoVaVc: Es funktioniert auch für diese. Das Entscheidende ist die Verwendung der keypress Ereignis, bei dem Sie einen Zeichencode erhalten, und nicht keyup o keydown die Ihnen einen Schlüsselcode geben.

0 Stimmen

e.which ist veraltet. Verwenden Sie e.key stattdessen, wie in if(e.key == 'z')

52voto

Gibolt Punkte 32347

Neuer und viel sauberer: Verwendung event.key . Keine willkürlichen Zahlencodes mehr!

HINWEIS: Die alten Eigenschaften ( .keyCode y .which ) sind veraltet.

node.addEventListener('keydown', function(event) {
    const key = event.key; // "a", "1", "Shift", etc.
});

Wenn Sie sicherstellen wollen, dass nur einzelne Zeichen eingegeben werden, markieren Sie key.length === 1 oder dass es sich um eines der Zeichen handelt, die Sie erwarten.

Mozilla-Dokumente

Unterstützte Browser

0 Stimmen

Ist dies für node.js?

0 Stimmen

Nein, mit Knoten ist jedes DOM-Element gemeint. Wenn Sie Node.js eine Verbindung zu einer Benutzeroberfläche haben, würde es vermutlich funktionieren

1 Stimmen

Bei einigen mobilen Geräten funktioniert das Drücken der Taste nicht undefiniert

43voto

Tim Down Punkte 304837

Es gibt eine Million Duplikate dieser Frage hier, aber ich versuche es trotzdem noch einmal:

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.keyCode || evt.which;
    var charStr = String.fromCharCode(charCode);
    alert(charStr);
};

Die beste Referenz für Schlüsselereignisse, die ich kenne, ist http://unixpapa.com/js/key.html .

17voto

lewdev Punkte 6158

Versuchen Sie es:

<table>
  <tr>
    <td>Key:</td>
    <td id="key"></td>
  </tr>
  <tr>
    <td>Key Code:</td>
    <td id="keyCode"></td>
  </tr>
  <tr>
    <td>Event Code:</td>
    <td id="eventCode"></td>
  </tr>
</table>
<script type="text/javascript">
  window.addEventListener("keydown", function(e) {
    //tested in IE/Chrome/Firefox
    document.getElementById("key").innerHTML = e.key;
    document.getElementById("keyCode").innerHTML = e.keyCode;
    document.getElementById("eventCode").innerHTML = e.code;
  })
</script>

*Hinweis: dies funktioniert in "Code-Schnipsel ausführen".

Diese Website tut dasselbe wie mein obiger Code: Schlüsselcode.info

0 Stimmen

Hier ist eine ähnliche Website mit einigen zusätzlichen Optionen: keyjs.dev

0 Stimmen

Auf Chrome, xfce, italienische Tastatur, spanisches Layout, gibt das Drücken von "<" "/" zurück, was die Taste ist, die auf der englischen Tastatur vorhanden ist. Warum?!? einige Chrom-Versionen vor war es nicht, dass!

3voto

JCasso Punkte 5253

Verwenden Sie diese:

function onKeyPress(evt){
  evt = (evt) ? evt : (window.event) ? event : null;
  if (evt)
  {
    var charCode = (evt.charCode) ? evt.charCode :((evt.keyCode) ? evt.keyCode :((evt.which) ? evt.which : 0));
    if (charCode == 13) 
        alert('User pressed Enter');
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X