Signatur
Beschreibung
KeyboardEvent.keyCode gibt eine Ganzzahl zurück, die die gedrückte Taste kennzeichnet, z. B. 13 für Enter, 27 für Escape oder 65 für die Taste „A“. Bei keydown und keyup steht der Wert für die physische bzw. virtuelle Taste. Bei keypress liefern viele Browser dagegen den Zeichencode, also dasselbe wie charCode.
Die Eigenschaft gilt als veraltet. Ihre Werte waren nie einheitlich festgelegt und hängen von Betriebssystem, Tastaturlayout und Browser ab. Besonders unzuverlässig sind Satzzeichen wie ;, = und - sowie Tasten auf nicht-englischen Layouts, etwa den deutschen Umlauten. Für neuen Code gibt es zwei bessere Eigenschaften: KeyboardEvent.key liefert das erzeugte Zeichen bzw. den Tastennamen ("Enter", "a", "ArrowUp"). KeyboardEvent.code liefert die physische Position der Taste ("KeyA", "Digit1").
Sinnvoll ist keyCode heute nur noch in Altcode oder als Rückfallwert für sehr alte Umgebungen, etwa alte Android-WebViews oder den Internet Explorer. Dort ist key nicht vorhanden oder liefert falsche Werte.
Rückgabewert
13 (Enter), 27 (Escape), 37–40 (Pfeiltasten). Ist die Taste unbekannt, ist der Wert 0. Während einer IME-Eingabe (Komposition) ist er meist 229.Beispiele
Altcode: Enter-Taste im Eingabefeld erkennen
const input = document.querySelector('#suche');
input.addEventListener('keydown', (event) => {
// Veraltet: 13 = Enter
if (event.keyCode === 13) {
console.log('Suche starten:', input.value);
}
});
Moderne Variante mit Rückfall auf keyCode
const isEscape = (event) =>
event.key === 'Escape' || event.key === 'Esc' || event.keyCode === 27;
document.addEventListener('keydown', (event) => {
if (isEscape(event)) {
document.querySelector('dialog[open]')?.close();
console.log('Dialog geschlossen');
}
});
IME-Komposition ausfiltern
const editor = document.querySelector('#editor');
editor.addEventListener('keydown', (event) => {
// Während japanischer/chinesischer Eingabe nicht reagieren
if (event.isComposing || event.keyCode === 229) return;
if (event.key === 'Enter' && !event.shiftKey) {
event.preventDefault();
console.log('Nachricht senden');
}
});
keyCode, key und code im Vergleich
document.addEventListener('keydown', (event) => {
console.log({
keyCode: event.keyCode,
key: event.key,
code: event.code
});
});
// Taste „Z“ auf deutschem Layout gedrückt
// Wichtig · Fallstricke
- Veraltet: Für neuen Code
key(für die Bedeutung der Taste) odercode(für die physische Position, z. B. bei WASD-Steuerung in Spielen) verwenden. Browser unterstützenkeyCodeweiterhin, doch der Wert ist nicht verlässlich einheitlich. - Die Werte hängen vom Layout ab: Satzzeichen und Umlaute liefern je nach Browser, Betriebssystem und Tastaturlayout unterschiedliche Codes. Firefox und Chrome weichen z. B. bei
;(59bzw.186) und=(61bzw.187) voneinander ab. - Bei
keypress(selbst veraltet) enthältkeyCodehäufig den Zeichencode statt des Tastencodes. Beikeydownist65sowohl „a“ als auch „A“, beikeypressist „a“ dagegen97. - Der Wert
229zeigt eine laufende IME-Eingabe an. Zusätzlichevent.isComposingprüfen. - Auf Mobilgeräten mit virtueller Tastatur, besonders unter Android, liefert
keyCodeoft0oder229. Für Texteingaben besser das Ereignisinputbzw.beforeinputnutzen. - Die Eigenschaft ist schreibgeschützt. Sie lässt sich auch nicht per
new KeyboardEvent()setzen, weilkeyCodekeine Option im Konstruktor-Wörterbuch ist.