Signatur
Beschreibung
KeyboardEvent.code gibt an, welche physische Taste gedrückt wurde, nicht welches Zeichen dabei entsteht. Der Wert orientiert sich an der Position der Taste auf einer US-QWERTY-Tastatur: Die Taste rechts neben Tab heißt immer "KeyQ", auch auf einer französischen AZERTY-Tastatur, auf der dort ein „A“ steht. Auf einer deutschen QWERTZ-Tastatur liefert die Taste mit der Aufschrift „Z“ daher "KeyY".
Das macht code ideal für positionsbasierte Steuerungen: WASD-Bewegung in Spielen, Tastenkürzel, die immer an derselben Stelle liegen sollen, oder Emulatoren und virtuelle Klaviere. Links- und rechtsseitige Modifikatoren werden unterschieden ("ShiftLeft" / "ShiftRight"), ebenso Ziffernblock-Tasten ("Numpad5" vs. "Digit5").
Wenn Sie dagegen wissen wollen, was der Benutzer tippen wollte (Texteingabe, Kürzel wie „Strg+Z“ nach Beschriftung), verwenden Sie KeyboardEvent.key. Die veralteten Eigenschaften keyCode und which sollten nicht mehr verwendet werden.
Typische Werte: "KeyA"–"KeyZ", "Digit0"–"Digit9", "Space", "Enter", "Escape", "ArrowUp", "ControlLeft", "F1", "Numpad0", "Backquote", "IntlBackslash". Bei unbekannten Tasten ist der Wert "Unidentified" bzw. ein Leerstring.
Rückgabewert
"KeyW", "ShiftLeft" oder "Numpad7". Schreibgeschützt.Beispiele
Physische Taste und erzeugtes Zeichen vergleichen
document.addEventListener('keydown', (event) => {
// Auf deutscher QWERTZ-Tastatur, Taste mit Aufschrift "Z"
console.log(`code: ${event.code}, key: ${event.key}`);
});
WASD-Steuerung unabhängig vom Tastaturlayout
const pressed = new Set();
const onDown = (event) => {
if (['KeyW', 'KeyA', 'KeyS', 'KeyD'].includes(event.code)) {
event.preventDefault();
pressed.add(event.code);
}
};
const onUp = (event) => pressed.delete(event.code);
window.addEventListener('keydown', onDown);
window.addEventListener('keyup', onUp);
const gameLoop = () => {
const dx = (pressed.has('KeyD') ? 1 : 0) - (pressed.has('KeyA') ? 1 : 0);
const dy = (pressed.has('KeyS') ? 1 : 0) - (pressed.has('KeyW') ? 1 : 0);
if (dx || dy) console.log(`Bewegung: ${dx}, ${dy}`);
requestAnimationFrame(gameLoop);
};
requestAnimationFrame(gameLoop);
Linke und rechte Modifikatortaste unterscheiden
window.addEventListener('keydown', (event) => {
switch (event.code) {
case 'ShiftLeft':
console.log('Linke Umschalttaste');
break;
case 'ShiftRight':
console.log('Rechte Umschalttaste');
break;
case 'Numpad5':
console.log('Ziffernblock 5');
break;
case 'Digit5':
console.log('5 in der Zahlenreihe');
break;
}
});
Beschriftung zur physischen Taste ermitteln (Keyboard Map API)
const showHint = async () => {
if (!navigator.keyboard?.getLayoutMap) {
console.log('Hinweis: Taste W (US-Position)');
return;
}
const layout = await navigator.keyboard.getLayoutMap();
const label = layout.get('KeyW');
console.log(`Drücken Sie "${label.toUpperCase()}" zum Vorwärtslaufen`);
};
showHint();
// Wichtig · Fallstricke
- Nicht für Texteingabe verwenden:
codeberücksichtigt weder Layout noch Umschalttaste noch IME. Für eingegebene Zeichenevent.keyoder besser dasinput-Event nutzen. - Namen sind US-bezogen:
"KeyY"ist auf deutschen Tastaturen die „Z“-Taste. In Hilfetexten nicht einfach den Code anzeigen, sondern die Beschriftung übernavigator.keyboard.getLayoutMap()ermitteln (nur Chromium-Browser) oder neutral formulieren. - Die Taste
"IntlBackslash"(<>| auf deutschen Tastaturen) existiert auf US-Tastaturen nicht; manche Tasten melden auf einzelnen Plattformen"Unidentified"oder einen Leerstring. - Bei virtuellen Tastaturen auf Mobilgeräten (Android/iOS) ist
codeoft leer oder unzuverlässig – dortkeybzw.input-Events verwenden. - Bei gedrückter Fn-Taste erzeugen Laptops teils abweichende Codes; die Fn-Taste selbst wird meist gar nicht gemeldet.
- Kompatibilität: in allen aktuellen Browsern verfügbar (Chrome 48+, Firefox 38+, Safari 10.1+, Edge 79+). Internet Explorer unterstützt die Eigenschaft nicht; dort gab es nur das veraltete
keyCode.