
📋 JavaScript key codes: vollständige tabelle von event.key, event.code und event.which
Ein Benutzer drückt Escape, und das Modal schließt sich nicht. Er betätigt Enter im Suchfeld, und nichts passiert. Kommt Ihnen das bekannt vor? Die Tastatursteuerung in JavaScript wirkt einfach, bis man es mit drei Events, einem Dutzend Eigenschaften und einem Zoo von Browser-Unterschieden zu tun bekommt.
Jedes keydown oder keyup erzeugt ein KeyboardEvent-Objekt mit zwei Dutzend Feldern. Einige sind seit der IE-Ära veraltet, andere verhalten sich in Firefox und Chrome unterschiedlich. Und die MDN-Dokumentation ist gespickt mit „Nicht verwenden"-Hinweisen. Entwickler brauchen keine weitere Spezifikation, sondern einen Spickzettel, der funktioniert.
Nachfolgend finden Sie eine vollständige Referenz zu Tastatur-Events: von der Anatomie des KeyboardEvent bis zu gebrauchsfertigen Snippets für Hotkeys. Setzen Sie ein Lesezeichen auf die Code-Tabelle, Sie werden sie in fast jedem Projekt benötigen.
💡 Kurzüberblick:
- Verwenden Sie
keydownstattkeypress: Es funktioniert für beliebige Tasten. event.keyliefert das Symbol der Taste,event.codegibt den physischen Code zurück.event.keyCodeundevent.whichsind veraltet, verwenden Sie sie nicht in neuem Code.- Die folgende Tabelle sammelt die Codes für alle Standardtasten in modernen Browsern.
Was in KeyboardEvent steckt
Wenn ein Benutzer eine beliebige Taste drückt, erzeugt der Browser ein KeyboardEvent-Objekt, einen Nachkommen von UIEvent, das wiederum das Basis-Event erweitert. Darin enthalten sind die Eigenschaften der Taste, der Zustand der Modifikatoren und Layout-Informationen.

Die Spezifikation für UI Events entwickelt sich weiter: Neue Eigenschaften kommen hinzu, alte werden als veraltet markiert. Die wesentliche Änderung der letzten Jahre ist die Abkehr von numerischen Codes (keyCode / charCode / which) zugunsten von event.key und event.code. Alle modernen Browser unterstützen dieses Paar, und Sie sollten Ihre Logik darauf aufbauen.
Die Browser-Unterstützung ist nahezu vollständig: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Wenn Ihr Projekt nicht an IE11 gebunden ist, können Sie event.which vergessen.
Drei Events: keydown, keypress und keyup
Der Browser unterscheidet drei Tastatur-Events. Die Auslösereihenfolge ist festgelegt:
- keydown, Taste wird gedrückt (Moment des Kontakts);
- keypress, Taste wird gehalten und erzeugt ein Zeichen (nur für Zeichentasten);
- keyup, Taste wird losgelassen.
Das Abonnieren von keydown per addEventListener:
1 const input = document.getElementById('type-here'); 2 3 input.addEventListener('keydown', function (event) { 4 console.log('Нажата:', event.key, '| Код:', event.code); 5 });
Für Inline-Handler verwenden Sie ein Element-Attribut:
1 <input type="text" id="type-here" onkeyup="handleKey(event)">
Wenn Sie das Event-Objekt in der Konsole ausgeben, sehen Sie die vollständige Struktur mit allen geerbten Feldern von UIEvent und Event:

Warum keydown die erste Wahl ist
keypress ist offiziell als veraltet anerkannt. Es wird nur für Tasten ausgelöst, die einen Zeichenwert erzeugen, und erfasst keine Modifikatoren: nicht Alt, nicht Ctrl, nicht Shift, nicht Meta. Sie können Ctrl+Z oder Shift+Tab nicht über keypress behandeln.
Der Unterschied zwischen keydown und keyup: keydown wird ausgelöst, bevor der Browser die Taste verarbeitet; keyup wird danach ausgelöst. Daraus folgt eine wichtige Konsequenz: event.preventDefault() innerhalb von keydown bricht die Browser-Aktion ab (zum Beispiel das Einfügen eines Zeichens in ein Feld), innerhalb von keyup jedoch nicht. Für Hotkeys, Eingabevalidierung und Spielsteuerung benötigen Sie keydown.
Eigenschaftstabelle von KeyboardEvent
Eigenschaft / Methode | Rückgabewert | Status |
|---|---|---|
| Zeichenwert der gedrückten Taste: | Aktuell |
| Physischer Code der Taste auf der Tastatur: | Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
| Numerischer Tastencode (zum Beispiel | Veraltet |
| Unicode-Code des Zeichens | Veraltet |
| Numerischer Tastencode (analog zu | Veraltet |
Die unteren drei Zeilen sind veraltet. Wechseln Sie, wo immer möglich, zu event.key. Falls Sie einen alten Browser unterstützen müssen, erstellen Sie einen Fallback:
1 window.addEventListener('keydown', function (event) { 2 const key = event.key !== undefined ? event.key : event.which; 3 if (key !== undefined) { 4 console.log('Клавиша:', key); 5 } 6 });
Aber im Jahr 2026 ist solcher Code nur noch für Legacy-Projekte. event.key funktioniert überall.
Modifikatortasten und Kombinationen
Control, Shift, Alt und Meta führen selbst keine Aktionen aus, ändern aber das Verhalten anderer Tasten. Das Drücken von Z ergibt den Buchstaben „z", während Ctrl+Z den Rückgängig-Befehl ausführt.
Boolesche Eigenschaften des Events helfen, einen Modifikator zu verfolgen:
1 document.getElementById('editor').addEventListener('keydown', function (event) { 2 if (event.ctrlKey && event.key === 'z') { 3 event.preventDefault(); 4 undoAction(); 5 } 6 7 if (event.ctrlKey && event.shiftKey && event.key === 'z') { 8 event.preventDefault(); 9 redoAction(); 10 } 11 });
Derselbe Ansatz gilt für beliebige Kombinationen: Ctrl+S (Speichern), Ctrl+Shift+N (Neues Fenster), Alt+Tab (Wechseln). Prüfen Sie die Reihenfolge: zuerst Modifikatoren über boolesche Flags, dann event.key für die spezifische Taste. Das macht die Logik lesbar, statt in numerischen Codes zu ertrinken.
Vollständige Tabelle der Tastencodes
Nachfolgend die aktuelle Tabelle für alle Standardtasten. Die Werte event.key und event.code sind so angegeben, wie moderne Browser (Chrome, Firefox, Edge, Safari) sie zurückgeben.
Navigation und Aktionen
Taste | event.which | event.key | event.code | Hinweis |
|---|---|---|---|---|
Backspace | 8 | Backspace | Backspace |
|
Tab | 9 | Tab | Tab |
|
Enter | 13 | Enter | Enter |
|
Shift (links) | 16 | Shift | ShiftLeft |
|
Shift (rechts) | 16 | Shift | ShiftRight |
|
Ctrl (links) | 17 | Control | ControlLeft |
|
Ctrl (rechts) | 17 | Control | ControlRight |
|
Alt (links) | 18 | Alt | AltLeft |
|
Alt (rechts) | 18 | Alt | AltRight |
|
Pause / Break | 19 | Pause | Pause |
|
Caps Lock | 20 | CapsLock | CapsLock |
|
Escape | 27 | Escape | Escape |
|
Leertaste | 32 |
| Space |
|
Page Up | 33 | PageUp | PageUp |
|
Page Down | 34 | PageDown | PageDown |
|
Ende | 35 | End | End |
|
Pos1 | 36 | Home | Home |
|
Pfeil links | 37 | ArrowLeft | ArrowLeft |
|
Pfeil hoch | 38 | ArrowUp | ArrowUp |
|
Pfeil rechts | 39 | ArrowRight | ArrowRight |
|
Pfeil runter | 40 | ArrowDown | ArrowDown |
|
Druck | 44 | PrintScreen | PrintScreen |
|
Einfügen | 45 | Insert | Insert |
|
Entfernen | 46 | Delete | Delete |
|
Ziffernreihe (Haupttastatur)
Taste | event.which | event.key | event.code |
|---|---|---|---|
0 | 48 | 0 | Digit0 |
1 | 49 | 1 | Digit1 |
2 | 50 | 2 | Digit2 |
3 | 51 | 3 | Digit3 |
4 | 52 | 4 | Digit4 |
5 | 53 | 5 | Digit5 |
6 | 54 | 6 | Digit6 |
7 | 55 | 7 | Digit7 |
8 | 56 | 8 | Digit8 |
9 | 57 | 9 | Digit9 |
Buchstaben A-Z
Taste | event.which | event.key | event.code |
|---|---|---|---|
A | 65 | a | KeyA |
B | 66 | b | KeyB |
C | 67 | c | KeyC |
D | 68 | d | KeyD |
E | 69 | e | KeyE |
F | 70 | f | KeyF |
G | 71 | g | KeyG |
H | 72 | h | KeyH |
I | 73 | i | KeyI |
J | 74 | j | KeyJ |
K | 75 | k | KeyK |
L | 76 | l | KeyL |
M | 77 | m | KeyM |
N | 78 | n | KeyN |
O | 79 | o | KeyO |
P | 80 | p | KeyP |
Q | 81 | q | KeyQ |
R | 82 | r | KeyR |
S | 83 | s | KeyS |
T | 84 | t | KeyT |
U | 85 | u | KeyU |
V | 86 | v | KeyV |
W | 87 | w | KeyW |
X | 88 | x | KeyX |
Y | 89 | y | KeyY |
Z | 90 | z | KeyZ |
event.key gibt für Buchstaben den Kleinbuchstaben zurück. event.code hängt nicht von Groß-/Kleinschreibung oder Layout ab: KeyA bezeichnet die physische A-Taste, selbst wenn das Layout Russisch ist und die Eingabe „Ф" lautet.
Spezialtasten
Taste | event.which | event.key | event.code | Hinweis |
|---|---|---|---|---|
Linke Windows-Taste | 91 | Meta | MetaLeft |
|
Rechte Windows-Taste | 92 | Meta | MetaRight |
|
Kontextmenü | 93 | ContextMenu | ContextMenu |
|
Ziffernblock (Numpad)
Taste | event.which | event.key | event.code |
|---|---|---|---|
Numpad 0 | 96 | 0 | Numpad0 |
Numpad 1 | 97 | 1 | Numpad1 |
Numpad 2 | 98 | 2 | Numpad2 |
Numpad 3 | 99 | 3 | Numpad3 |
Numpad 4 | 100 | 4 | Numpad4 |
Numpad 5 | 101 | 5 | Numpad5 |
Numpad 6 | 102 | 6 | Numpad6 |
Numpad 7 | 103 | 7 | Numpad7 |
Numpad 8 | 104 | 8 | Numpad8 |
Numpad 9 | 105 | 9 | Numpad9 |
Numpad Multiplizieren | 106 | * | NumpadMultiply |
Numpad Addieren | 107 | + | NumpadAdd |
Numpad Subtrahieren | 109 | - | NumpadSubtract |
Numpad Dezimal | 110 | . | NumpadDecimal |
Numpad Dividieren | 111 | / | NumpadDivide |
Funktionstasten
Taste | event.which | event.key | event.code |
|---|---|---|---|
F1 | 112 | F1 | F1 |
F2 | 113 | F2 | F2 |
F3 | 114 | F3 | F3 |
F4 | 115 | F4 | F4 |
F5 | 116 | F5 | F5 |
F6 | 117 | F6 | F6 |
F7 | 118 | F7 | F7 |
F8 | 119 | F8 | F8 |
F9 | 120 | F9 | F9 |
F10 | 121 | F10 | F10 |
F11 | 122 | F11 | F11 |
F12 | 123 | F12 | F12 |
System und Multimedia
Taste | event.which | event.key | event.code | Hinweis |
|---|---|---|---|---|
Num Lock | 144 | NumLock | NumLock |
|
Rollen | 145 | ScrollLock | ScrollLock |
|
Stumm | 173 | AudioVolumeMute | AudioVolumeMute | In Firefox |
Leiser | 174 | AudioVolumeDown | AudioVolumeDown | In Firefox |
Lauter | 175 | AudioVolumeUp | AudioVolumeUp | In Firefox |
Media Player | 181 | LaunchMediaPlayer | LaunchMediaPlayer | In Firefox |
App 1 starten | 182 | LaunchApplication1 | LaunchApplication1 | In Firefox |
App 2 starten | 183 | LaunchApplication2 | LaunchApplication2 | In Firefox |
Satzzeichen und Symbole
Taste | event.which | event.key | event.code | Hinweis |
|---|---|---|---|---|
Semikolon (;) | 186 | ; | Semicolon | In Firefox |
Gleich (=) | 187 | = | Equal | In Firefox |
Komma ( | 188 |
| Comma |
|
Minus (-) | 189 | - | Minus | In Firefox |
Punkt (.) | 190 | . | Period |
|
Schrägstrich (/) | 191 | / | Slash |
|
Backquote ( | Backquote |
|
|
|
Eckige Klammer links ([) | 219 | [ | BracketLeft |
|
Backslash () | 220 | \ | Backslash |
|
Eckige Klammer rechts (]) | 221 | ] | BracketRight |
|
Hochkomma (') | 222 | ' | Quote |
|
Wichtige Hinweise zur Tabelle
event.whichist eine veraltete Eigenschaft, verwenden Sieevent.key.event.codeist für Klein- (a) und Großbuchstaben (A) identisch, es ist die physische Taste.event.keygibt das tatsächliche Zeichen unter Berücksichtigung der Groß-/Kleinschreibung zurück.- In Firefox weichen die
event.which-Werte für die TastenEqual,SemicolonundMinusvon Chrome/Edge/Safari ab (in der Tabelle vermerkt). Ein weiterer Grund,event.whichnicht zu verwenden. - Chromium-basierte Browser und Firefox liefern für alle aufgeführten Tasten identische
event.key- undevent.code-Werte. - Virtuelle Tastaturen: Die UI Events-Spezifikation verlangt, dass eine virtuelle Tastatur (mobil, auf dem Bildschirm), die ein Standardlayout nachbildet, korrekte
event.code-Werte zurückgibt. In der Praxis verarbeiten mobile Browser (Chrome Android, Safari iOS)keydown/keyupfür die Haupttasten korrekt, aberevent.codekann bei nicht standardmäßigen Layouts leer sein.
Interaktiver Trainer

Zur schnellen Überprüfung jedes Codes aus dem Artikel nutzen Sie den Tastatur-Trainer: keyevents.netlify.app. Bewegen Sie den Cursor in den Bereich, drücken Sie Tasten und sehen Sie in Echtzeit die Werte von event.key, event.code und event.which sowie die Zustände der Modifikator-Flags. Der Quellcode ist auf GitHub verfügbar.
Video: Tastatur-Events in der Praxis
Eine kurze praktische Aufschlüsselung von keydown und keyup, der Umgang mit Modifikatoren und Hotkeys mit Live-Beispielen:
⁉️🤔 Häufig gestellte Fragen
Was ist der Unterschied zwischen event.key und event.code?
event.keygibt den Zeichenwert unter Berücksichtigung von Layout und Groß-/Kleinschreibung zurück: Für die A-Taste ist es"a"(oder"A"mit Shift), für russisches Layout"ф".event.codegibt den physischen Tastencode zurück, identisch für alle Layouts:"KeyA". Für Hotkeys istevent.codezuverlässiger, es hängt nicht von der Eingabesprache ab. Für Texteingaben verwenden Sieevent.key.
Warum wird keypress nicht mehr verwendet?
Die W3C-Spezifikation hat
keypressals veraltet markiert: Es wird nur für Zeichentasten ausgelöst und erfasst keine Modifikatoren. Sie könnenCtrl+C,Shift+Tabund andere Kombinationen nicht überkeypressbehandeln.keydowndeckt alle Tasten ab und wird in allen modernen Browsern identisch unterstützt.
Kann man vollständig auf event.which und event.keyCode verzichten?
Ja, im Jahr 2026 können Sie das.
event.keywird in Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+ unterstützt. Wenn Ihr Projekt nicht auf IE11 oder Firefox 28 abzielt, verwenden Sie nurevent.keyundevent.code.
Wie behandelt man einen langen Tastendruck?
Kombinieren Sie
keydownundkeyup. Beikeydownstarten Sie einen Timer oderrequestAnimationFrame, beikeyupsetzen Sie ihn zurück. Für Spieleingaben ist das das Standardmuster: Taste gehalten, Figur bewegt sich, losgelassen, sie stoppt.
Funktionieren Tastatur-Events auf mobilen Geräten?
keydownundkeyupfunktionieren in mobilen Browsern bei Verwendung einer externen Bluetooth-Tastatur. Die Bildschirmtastatur erzeugtinput-Events, nichtkeydown/keyupfür alle Tasten, daher ist es für Textfelder auf Mobilgeräten besser, dasinput-Event zu verwenden.
Wie unterscheidet man linke Shift von rechter?
Über
event.code:"ShiftLeft"oder"ShiftRight".event.keygibt für beide"Shift"zurück. Gleiches gilt fürControl,AltundMeta.
Was Sie in Ihrem Projekt verwenden sollten
Wenn Sie neuen Code schreiben, nehmen Sie keydown als Haupt-Event und zur Tastenidentifikation event.key (Symbol) und event.code (physische Taste). Diese Kombination deckt alle Szenarien ab: Hotkeys, Navigation, Spieleingaben, Formularvalidierung.
Wenn Sie ein Produkt mit Legacy-Code auf Basis von event.which oder event.keyCode pflegen, planen Sie ein Refactoring. Der Arbeitsaufwand ist gering: Austausch in den Handlern, aber der Gewinn ist sauberer, vorhersagbarer Code ohne einen Zoo von Browser-Unterschieden.
Behalten Sie die obige Tabelle als Lesezeichen. Wenn Sie das nächste Mal den Code für eine bestimmte Taste benötigen, öffnen Sie sie und kopieren Sie den benötigten event.code-Wert, ohne sich an numerische Codes aus der IE6-Ära erinnern zu müssen.



