Skip to content

Allt om WordPress, webbutveckling — och mer därtill

📋 JavaScript-tangentkoder: komplett tabell över event.key, event.code och event.which

📋 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 keydown istället för keypress: det fungerar för alla tangenter.
  • event.key ger tangentens symbol, event.code returnerar dess fysiska kod.
  • event.keyCode och event.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.

Arvshierarki för KeyboardEvent-gränssnittet i JavaScript

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:

1const input = document.getElementById('type-here');
2
3input.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:

Keyup-händelseobjektet i webbläsarkonsolen med alla KeyboardEvent-egenskaper

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

event.key

Teckenvärde för den nedtryckta tangenten: "a", "Enter" eller "ArrowUp"

Aktuell

event.code

Fysisk kod för tangenten på tangentbordet: "KeyA", "Enter" eller "ArrowUp"

Aktuell

event.altKey

true om Alt hålls ned

Aktuell

event.ctrlKey

true om Control hålls ned

Aktuell

event.shiftKey

true om Shift hålls ned

Aktuell

event.metaKey

true om Meta hålls ned (Windows / Command på Mac)

Aktuell

event.getModifierState()

true för aktivt tillstånd för CapsLock, NumLock, Alt, Control, Shift eller Meta

Aktuell

event.keyCode

Numerisk tangentkod (till exempel 65 för A)

Föråldrad

event.charCode

Unicode-kod för tecknet

Föråldrad

event.which

Numerisk tangentkod (analog med keyCode)

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:

1window.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:

1document.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.

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

event.shiftKey = true

Shift (höger)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (vänster)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (höger)

17

Control

ControlRight

event.ctrlKey = true

Alt (vänster)

18

Alt

AltLeft

event.altKey = true

Alt (höger)

18

Alt

AltRight

event.altKey = true

Pause / Break

19

Pause

Pause

Caps Lock

20

CapsLock

CapsLock

Escape

27

Escape

Escape

Mellanslag

32

Space

event.key - enkelt mellanslag

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

event.metaKey = true

Höger Windows

92

Meta

MetaRight

event.metaKey = true

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 event.which = 181, event.code = VolumeMute

Volym ned

174

AudioVolumeDown

AudioVolumeDown

I Firefox event.which = 182, event.code = VolumeDown

Volym upp

175

AudioVolumeUp

AudioVolumeUp

I Firefox event.which = 183, event.code = VolumeUp

Mediaspelare

181

LaunchMediaPlayer

LaunchMediaPlayer

I Firefox event.which = 0, event.code = MediaSelect

Starta app 1

182

LaunchApplication1

LaunchApplication1

I Firefox event.which = 0, event.code = LaunchApp1

Starta app 2

183

LaunchApplication2

LaunchApplication2

I Firefox event.which = 0, event.code = LaunchApp2

Skiljetecken och symboler

Tangent

event.which

event.key

event.code

Notering

Semikolon (;)

186

;

Semicolon

I Firefox event.which = 59

Likhetstecken (=)

187

=

Equal

I Firefox event.which = 61

Komma (,)

188

,

Comma

Minus (-)

189

-

Minus

I Firefox event.which = 173

Punkt (.)

190

.

Period

Snedstreck (/)

191

/

Slash

Grav accent () | 192 |

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änd event.key.
  • event.code är identisk för gemener (a) och versaler (A), det är den fysiska tangenten. event.key returnerar det faktiska tecknet med hänsyn till skiftläge.
  • I Firefox skiljer sig event.which-värdena för tangenterna Equal, Semicolon och Minus från Chrome/Edge/Safari (noterat i tabellen). Ännu en anledning att inte använda event.which.
  • Chromium-baserade webbläsare och Firefox ger identiska event.key och event.code fö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/keyup korrekt för huvudtangenter, men event.code kan vara tomt för icke-standardlayouter.

Interaktiv tränare

Interaktiv tränare för JavaScript-tangentbordshändelser

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.key returnerar 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.code returnerar den fysiska tangentkoden, identisk för alla layouter: "KeyA". För snabbtangenter är event.code mer tillförlitligt, det beror inte på inmatningsspråk. För textinmatning, använd event.key.

Varför används inte keypress längre?

W3C-specifikationen markerade keypress som föråldrad: den avfyras bara för teckentangenter och fångar inte modifierare. Du kan inte hantera Ctrl+C, Shift+Tab och andra kombinationer via keypress. keydown tä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.key stöds i Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Om ditt projekt inte riktar sig mot IE11 eller Firefox 28, använd endast event.key och event.code.

Hur hanterar man en lång tangentnedtryckning?

Kombinera keydown och keyup. Vid keydown starta en timer eller requestAnimationFrame, vid keyup, å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?

keydown och keyup fungerar i mobila webbläsare när ett externt Bluetooth-tangentbord används. Skärmtangentbordet genererar input-händelser, inte keydown/keyup för alla tangenter, så för textfält på mobil är det bättre att använda input-händelsen.

Hur skiljer man på vänster Shift och höger?

Via event.code: "ShiftLeft" eller "ShiftRight". event.key returnerar "Shift" för båda. Samma sak för Control, Alt och Meta.

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.