
📋 JavaScript-tangentkoder: komplett tabell över event.key, event.code och event.which
En användare trycker på Escape, och modalen stängs inte. De trycker Enter i sökfältet, och ingenting händer. Låter det bekant? Tangentbordshantering i JavaScript verkar enkelt tills du börjar hantera tre händelser, ett dussin egenskaper och en djungel av webbläsarskillnader.
Varje keydown eller keyup skapar ett KeyboardEvent-objekt med två dussin fält. Vissa har varit föråldrade sedan IE-eran, andra beter sig olika i Firefox och Chrome. Och MDN-dokumentationen är full av "använd inte"-noteringar. Utvecklare behöver inte ännu en specifikation, de behöver ett fusklapp som fungerar.
Här nedan är en komplett referens för tangentbordshändelser: från KeyboardEvent-objektets anatomi till färdiga kodsnuttar för snabbtangenter. Bokmärk kodtabellen, du kommer att behöva den i vartannat projekt.
💡 Snabb översikt:
- Använd
keydownistället förkeypress: det fungerar för alla tangenter. event.keyger tangentens symbol,event.codereturnerar dess fysiska kod.event.keyCodeochevent.whichär föråldrade, använd dem inte i ny kod.- Tabellen nedan samlar koder för alla standardtangenter i moderna webbläsare.
Vad som finns inuti KeyboardEvent
När en användare trycker på en tangent skapar webbläsaren ett KeyboardEvent-objekt, en ättling till UIEvent, som i sin tur utökar basklassen Event. Inuti finns tangentens egenskaper, modifieringsstatus och layoutinformation.

Specifikationen UI Events utvecklas: nya egenskaper tillkommer, gamla blir föråldrade. Den största förändringen de senaste åren är övergången från numeriska koder (keyCode / charCode / which) till förmån för event.key och event.code. Alla moderna webbläsare stöder detta par, och du bör bygga din logik på dem.
Webbläsarstödet är nästan komplett: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Om ditt projekt inte har fastnat med IE11 kan du glömma event.which.
Tre händelser: keydown, keypress och keyup
Webbläsaren skiljer på tre tangentbordshändelser. Avfyrningsordningen är fast:
- keydown, tangenten trycks ned (kontaktögonblicket);
- keypress, tangenten hålls ned och genererar ett tecken (endast för teckentangenter);
- keyup, tangenten släpps.
Prenumerera på keydown via 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-hanterare, använd ett elementattribut:
1 <input type="text" id="type-here" onkeyup="handleKey(event)">
Om du skriver ut händelseobjektet till konsolen ser du hela strukturen med alla ärvda fält från UIEvent och Event:

Varför keydown är förstahandsvalet
keypress är officiellt erkänt som föråldrat. Det avfyras bara för tangenter som producerar ett teckenvärde, och fångar inte modifierare: inte Alt, inte Ctrl, inte Shift, inte Meta. Du kan inte hantera Ctrl+Z eller Shift+Tab via keypress.
Skillnaden mellan keydown och keyup: keydown avfyras innan webbläsaren bearbetar tangenten; keyup avfyras efter. En viktig konsekvens följer: event.preventDefault() inuti keydown avbryter webbläsarens åtgärd (till exempel att mata in ett tecken i ett fält), men inuti keyup gör den det inte. För snabbtangenter, indatavalidering och spelkontroller behöver du keydown.
Egenskapstabell för KeyboardEvent
Egenskap / Metod | Vad den returnerar | Status |
|---|---|---|
| Teckenvärde för den nedtryckta tangenten: | Aktuell |
| Fysisk kod för tangenten på tangentbordet: | Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
|
| Aktuell |
| Numerisk tangentkod (till exempel | Föråldrad |
| Unicode-kod för tecknet | Föråldrad |
| Numerisk tangentkod (analog med | Föråldrad |
De tre nedersta raderna är föråldrade. Byt till event.key där det är möjligt. Om du måste stödja en gammal webbläsare, gör en 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 });
Men 2026 är sådan kod bara för äldre projekt. event.key fungerar överallt.
Modifierartangenter och kombinationer
Control, Shift, Alt och Meta utför inga åtgärder själva, men ändrar beteendet hos andra tangenter. Att trycka på Z ger bokstaven "z", medan Ctrl+Z utför ångra.
Booleska egenskaper i händelsen hjälper till att spåra en modifierare:
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 });
Samma tillvägagångssätt gäller för alla kombinationer: Ctrl+S (spara), Ctrl+Shift+N (nytt fönster), Alt+Tab (växla). Kontrollera ordningen: först modifierare via booleska flaggor, sedan event.key för den specifika tangenten. Detta gör logiken läsbar istället för att drunkna i numeriska koder.
Komplett tabell med tangentkoder
Nedan är den aktuella tabellen för alla standardtangenter. Värdena event.key och event.code anges som moderna webbläsare (Chrome, Firefox, Edge, Safari) returnerar dem.
Navigering och åtgärder
Tangent | event.which | event.key | event.code | Notering |
|---|---|---|---|---|
Backsteg | 8 | Backspace | Backspace |
|
Tab | 9 | Tab | Tab |
|
Enter | 13 | Enter | Enter |
|
Shift (vänster) | 16 | Shift | ShiftLeft |
|
Shift (höger) | 16 | Shift | ShiftRight |
|
Ctrl (vänster) | 17 | Control | ControlLeft |
|
Ctrl (höger) | 17 | Control | ControlRight |
|
Alt (vänster) | 18 | Alt | AltLeft |
|
Alt (höger) | 18 | Alt | AltRight |
|
Pause / Break | 19 | Pause | Pause |
|
Caps Lock | 20 | CapsLock | CapsLock |
|
Escape | 27 | Escape | Escape |
|
Mellanslag | 32 |
| Space |
|
Page Up | 33 | PageUp | PageUp |
|
Page Down | 34 | PageDown | PageDown |
|
End | 35 | End | End |
|
Home | 36 | Home | Home |
|
Pil vänster | 37 | ArrowLeft | ArrowLeft |
|
Pil upp | 38 | ArrowUp | ArrowUp |
|
Pil höger | 39 | ArrowRight | ArrowRight |
|
Pil ned | 40 | ArrowDown | ArrowDown |
|
Print Screen | 44 | PrintScreen | PrintScreen |
|
Insert | 45 | Insert | Insert |
|
Delete | 46 | Delete | Delete |
|
Sifferraden (huvudtangentbord)
Tangent | 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 |
Bokstäver A-Z
Tangent | 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 returnerar det gemena värdet för bokstäver. event.code beror inte på versal/gemen eller layout: KeyA betyder den fysiska A-tangenten, även om layouten är rysk och inmatningen är "Ф".
Specialtangenter
Tangent | event.which | event.key | event.code | Notering |
|---|---|---|---|---|
Vänster Windows | 91 | Meta | MetaLeft |
|
Höger Windows | 92 | Meta | MetaRight |
|
Snabbmeny | 93 | ContextMenu | ContextMenu |
|
Numeriskt tangentbord (Numpad)
Tangent | 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 Multiplicera | 106 | * | NumpadMultiply |
Numpad Addera | 107 | + | NumpadAdd |
Numpad Subtrahera | 109 | - | NumpadSubtract |
Numpad Decimal | 110 | . | NumpadDecimal |
Numpad Dividera | 111 | / | NumpadDivide |
Funktionstangenter
Tangent | 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 och multimedia
Tangent | event.which | event.key | event.code | Notering |
|---|---|---|---|---|
Num Lock | 144 | NumLock | NumLock |
|
Scroll Lock | 145 | ScrollLock | ScrollLock |
|
Ljud av | 173 | AudioVolumeMute | AudioVolumeMute | I Firefox |
Volym ned | 174 | AudioVolumeDown | AudioVolumeDown | I Firefox |
Volym upp | 175 | AudioVolumeUp | AudioVolumeUp | I Firefox |
Mediaspelare | 181 | LaunchMediaPlayer | LaunchMediaPlayer | I Firefox |
Starta app 1 | 182 | LaunchApplication1 | LaunchApplication1 | I Firefox |
Starta app 2 | 183 | LaunchApplication2 | LaunchApplication2 | I Firefox |
Skiljetecken och symboler
Tangent | event.which | event.key | event.code | Notering |
|---|---|---|---|---|
Semikolon (;) | 186 | ; | Semicolon | I Firefox |
Likhetstecken (=) | 187 | = | Equal | I Firefox |
Komma ( | 188 |
| Comma |
|
Minus (-) | 189 | - | Minus | I Firefox |
Punkt (.) | 190 | . | Period |
|
Snedstreck (/) | 191 | / | Slash |
|
Grav accent ( | Backquote |
|
|
|
Hakparentes vänster ([) | 219 | [ | BracketLeft |
|
Omvänt snedstreck () | 220 | \ | Backslash |
|
Hakparentes höger (]) | 221 | ] | BracketRight |
|
Apostrof (') | 222 | ' | Quote |
|
Viktiga tabellnoteringar
event.whichär en föråldrad egenskap, användevent.key.event.codeär identisk för gemener (a) och versaler (A), det är den fysiska tangenten.event.keyreturnerar det faktiska tecknet med hänsyn till skiftläge.- I Firefox skiljer sig
event.which-värdena för tangenternaEqual,SemicolonochMinusfrån Chrome/Edge/Safari (noterat i tabellen). Ännu en anledning att inte användaevent.which. - Chromium-baserade webbläsare och Firefox ger identiska
event.keyochevent.codeför alla listade tangenter. - Virtuella tangentbord: specifikationen UI Events kräver att ett virtuellt tangentbord (mobilt, på skärmen) som upprepar en standardlayout returnerar korrekt
event.code. I praktiken hanterar mobila webbläsare (Chrome Android, Safari iOS)keydown/keyupkorrekt för huvudtangenter, menevent.codekan vara tomt för icke-standardlayouter.
Interaktiv tränare

För snabb verifiering av valfri kod från artikeln, använd tangentbordstränaren: keyevents.netlify.app. Flytta markören till ytan, tryck på tangenter och se värdena för event.key, event.code och event.which, samt modifieringsflaggornas tillstånd i realtid. Källkoden finns tillgänglig på GitHub.
Video: tangentbordshändelser i praktiken
En kort praktisk genomgång av keydown och keyup, arbete med modifierare och snabbtangenter med levande exempel:
⁉️🤔 Vanliga frågor
Vad är skillnaden mellan event.key och event.code?
event.keyreturnerar teckenvärdet med hänsyn till layout och skiftläge: för A-tangenten är det"a"(eller"A"med Shift), för rysk layout,"ф".event.codereturnerar den fysiska tangentkoden, identisk för alla layouter:"KeyA". För snabbtangenter ärevent.codemer tillförlitligt, det beror inte på inmatningsspråk. För textinmatning, användevent.key.
Varför används inte keypress längre?
W3C-specifikationen markerade
keypresssom föråldrad: den avfyras bara för teckentangenter och fångar inte modifierare. Du kan inte hanteraCtrl+C,Shift+Taboch andra kombinationer viakeypress.keydowntäcker alla tangenter och stöds identiskt i alla moderna webbläsare.
Kan man helt överge event.which och event.keyCode?
Ja, 2026 kan du det.
event.keystöds i Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Om ditt projekt inte riktar sig mot IE11 eller Firefox 28, använd endastevent.keyochevent.code.
Hur hanterar man en lång tangentnedtryckning?
Kombinera
keydownochkeyup. Vidkeydownstarta en timer ellerrequestAnimationFrame, vidkeyup, återställ den. För spelinput är detta standardmönstret: tangenten hålls ned, karaktären rör sig, släpps, stannar.
Fungerar tangentbordshändelser på mobila enheter?
keydownochkeyupfungerar i mobila webbläsare när ett externt Bluetooth-tangentbord används. Skärmtangentbordet genererarinput-händelser, intekeydown/keyupför alla tangenter, så för textfält på mobil är det bättre att användainput-händelsen.
Hur skiljer man på vänster Shift och höger?
Via
event.code:"ShiftLeft"eller"ShiftRight".event.keyreturnerar"Shift"för båda. Samma sak förControl,AltochMeta.
Vad du ska använda i ditt projekt
Om du skriver ny kod, ta keydown som huvudhändelse, och för tangentidentifiering, event.key (symbol) och event.code (fysisk tangent). Denna kombination täcker alla scenarier: snabbtangenter, navigering, spelinput, formulärvalidering.
Om du underhåller en produkt med äldre kod på event.which eller event.keyCode, planera en refaktorering. Arbetsvolymen är liten: ersättning i hanterare, men vinsten är ren, förutsägbar kod utan en djungel av webbläsarskillnader.
Ha tabellen ovan bokmärkt. När du nästa gång behöver koden för en specifik tangent, öppna den och kopiera det nödvändiga event.code-värdet utan att behöva minnas numeriska koder från IE6-eran.



