Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

📋 JavaScript-näppäinkoodit: täydellinen taulukko event.key-, event.code- ja event.which-arvoista

📋 JavaScript-näppäinkoodit: täydellinen taulukko event.key-, event.code- ja event.which-arvoista

Käyttäjä painaa Esc-näppäintä, eikä modaali sulkeudu. Hän painaa Enteriä hakukentässä, eikä mitään tapahdu. Kuulostaako tutulta? Näppäimistön käsittely JavaScriptillä vaikuttaa yksinkertaiselta, kunnes alat käsitellä kolmea tapahtumaa, tusinaa ominaisuutta ja selainerojen viidakkoa.

Jokainen keydown tai keyup tuottaa KeyboardEvent-olion, jossa on parikymmentä kenttää. Osa on ollut vanhentuneita IE-aikakaudelta lähtien, toiset käyttäytyvät eri tavoin Firefoxissa ja Chromessa. Ja MDN:n dokumentaatio on täynnä "älä käytä" -huomautuksia. Kehittäjät eivät tarvitse uutta määrittelyä, vaan toimivan lunttilapun.

Alla on kattava viite näppäimistötapahtumista: KeyboardEvent-olion anatomiasta valmiisiin koodinpätkiin pikanäppäimiä varten. Pidä kooditaulukko kirjanmerkeissä, tulet tarvitsemaan sitä lähes joka toisessa projektissa.

💡 Pikaopas:

  • Käytä keydown-tapahtumaa keypress-tapahtuman sijaan: se toimii kaikille näppäimille.
  • event.key antaa näppäimen symbolin, event.code palauttaa sen fyysisen koodin.
  • event.keyCode ja event.which ovat vanhentuneita, älä käytä niitä uudessa koodissa.
  • Alla oleva taulukko kokoaa koodit kaikille vakionäppäimille nykyselaimissa.

Mitä KeyboardEvent sisältää

Kun käyttäjä painaa mitä tahansa näppäintä, selain luo KeyboardEvent-olion, joka on UIEvent-olion jälkeläinen, mikä puolestaan laajentaa perus-Event-oliota. Sen sisällä ovat näppäimen ominaisuudet, muokkausnäppäinten tila ja asettelutiedot.

JavaScriptin KeyboardEvent-rajapinnan periytymishierarkia

UI Events -määrittely kehittyy: uusia ominaisuuksia ilmestyy, vanhat merkitään vanhentuneiksi. Viime vuosien suurin muutos on siirtyminen pois numerokoodeista (keyCode / charCode / which) kohti event.key- ja event.code-ominaisuuksia. Kaikki nykyselaimet tukevat tätä paria, ja logiikkasi kannattaa rakentaa niiden varaan.

Selaintuki on lähes täydellinen: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Jos projektisi ei ole jumissa IE11:ssä, voit unohtaa event.which-ominaisuuden.

Kolme tapahtumaa: keydown, keypress ja keyup

Selain erottaa kolme näppäimistötapahtumaa. Laukeamisjärjestys on kiinteä:

  • keydown, näppäin painetaan alas (kosketushetki);
  • keypress, näppäin pidetään pohjassa ja se tuottaa merkin (vain merkin tuottaville näppäimille);
  • keyup, näppäin vapautetaan.

keydown-tapahtuman kuuntelu addEventListener-metodilla:

1const input = document.getElementById('type-here');
2
3input.addEventListener('keydown', function (event) {
4 console.log('Нажата:', event.key, '| Код:', event.code);
5});

Sisäisille käsittelijöille käytä elementin attribuuttia:

1<input type="text" id="type-here" onkeyup="handleKey(event)">

Jos tulostat tapahtumaolion konsoliin, näet koko rakenteen kaikkine perittyine kenttineen UIEvent- ja Event-olioista:

Keyup-tapahtumaolio selainkonsolissa ja sen KeyboardEvent-ominaisuudet

Miksi keydown on ensisijainen valinta

keypress on virallisesti tunnustettu vanhentuneeksi. Se laukeaa vain näppäimille, jotka tuottavat merkin arvon, eikä se havaitse muokkausnäppäimiä: ei Alt, ei Ctrl, ei Shift, ei Meta. Et voi käsitellä Ctrl+Z- tai Shift+Tab-yhdistelmiä keypress-tapahtuman kautta.

Ero keydown- ja keyup-tapahtumien välillä: keydown laukeaa ennen kuin selain käsittelee näppäimen; keyup laukeaa sen jälkeen. Tästä seuraa tärkeä asia: event.preventDefault() keydown-tapahtuman sisällä peruuttaa selaimen toiminnon (esimerkiksi merkin syöttämisen kenttään), mutta keyup-tapahtuman sisällä se ei peruuta. Pikanäppäimiin, syötteen validointiin ja peliohjaimiin tarvitset keydown-tapahtuman.

KeyboardEvent-ominaisuustaulukko

Ominaisuus / Metodi

Mitä palauttaa

Tila

event.key

Painetun näppäimen merkin arvo: "a", "Enter" tai "ArrowUp"

Nykyinen

event.code

Näppäimen fyysinen koodi näppäimistöllä: "KeyA", "Enter" tai "ArrowUp"

Nykyinen

event.altKey

true, jos Alt on pohjassa

Nykyinen

event.ctrlKey

true, jos Control on pohjassa

Nykyinen

event.shiftKey

true, jos Shift on pohjassa

Nykyinen

event.metaKey

true, jos Meta on pohjassa (Windows / Command Macilla)

Nykyinen

event.getModifierState()

true aktiiviselle tilalle näppäimille CapsLock, NumLock, Alt, Control, Shift tai Meta

Nykyinen

event.keyCode

Numerinen näppäinkoodi (esimerkiksi 65 A:lle)

Vanhentunut

event.charCode

Merkin Unicode-koodi

Vanhentunut

event.which

Numerinen näppäinkoodi (vastaa keyCode-koodia)

Vanhentunut

Kolme alinta riviä ovat vanhentuneita. Aina kun mahdollista, siirry käyttämään event.key-ominaisuutta. Jos joudut tukemaan vanhaa selainta, tee varakäsittelijä:

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});

Mutta vuonna 2026 tällainen koodi on vain vanhoja projekteja varten. event.key toimii kaikkialla.

Muokkausnäppäimet ja yhdistelmät

Control-, Shift-, Alt- ja Meta-näppäimet eivät itsessään suorita toimintoja, vaan muuttavat muiden näppäinten käyttäytymistä. Z-näppäimen painaminen antaa kirjaimen "z", kun taas Ctrl+Z suorittaa kumoa-toiminnon.

Tapahtuman totuusarvo-ominaisuudet auttavat muokkausnäppäimen seuraamisessa:

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});

Sama lähestymistapa pätee kaikkiin yhdistelmiin: Ctrl+S (tallenna), Ctrl+Shift+N (uusi ikkuna), Alt+Tab (vaihda). Tarkistusjärjestys: ensin muokkausnäppäimet totuusarvolippujen kautta, sitten event.key tietylle näppäimelle. Tämä tekee logiikasta luettavaa sen sijaan, että se hukkuisi numerokoodeihin.

Täydellinen näppäinkooditaulukko

Alla on ajantasainen taulukko kaikille vakionäppäimille. Arvot event.key ja event.code on annettu sellaisina kuin nykyselaimet (Chrome, Firefox, Edge, Safari) ne palauttavat.

Näppäin

event.which

event.key

event.code

Huomio

Backspace

8

Backspace

Backspace

Tab

9

Tab

Tab

Enter

13

Enter

Enter

Shift (vasen)

16

Shift

ShiftLeft

event.shiftKey = true

Shift (oikea)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (vasen)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (oikea)

17

Control

ControlRight

event.ctrlKey = true

Alt (vasen)

18

Alt

AltLeft

event.altKey = true

Alt (oikea)

18

Alt

AltRight

event.altKey = true

Pause / Break

19

Pause

Pause

Caps Lock

20

CapsLock

CapsLock

Escape

27

Escape

Escape

Välilyönti

32

Space

event.key - yksi välilyönti

Page Up

33

PageUp

PageUp

Page Down

34

PageDown

PageDown

End

35

End

End

Home

36

Home

Home

Nuoli vasemmalle

37

ArrowLeft

ArrowLeft

Nuoli ylös

38

ArrowUp

ArrowUp

Nuoli oikealle

39

ArrowRight

ArrowRight

Nuoli alas

40

ArrowDown

ArrowDown

Print Screen

44

PrintScreen

PrintScreen

Insert

45

Insert

Insert

Delete

46

Delete

Delete

Numerorivi (päänäppäimistö)

Näppäin

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

Kirjaimet A-Z

Näppäin

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 palauttaa kirjaimille pienaakkosen arvon. event.code ei riipu koosta tai näppäimistöasettelusta: KeyA tarkoittaa fyysistä A-näppäintä, vaikka asettelu olisi venäläinen ja syöte olisi "Ф".

Erikoisnäppäimet

Näppäin

event.which

event.key

event.code

Huomio

Vasen Windows

91

Meta

MetaLeft

event.metaKey = true

Oikea Windows

92

Meta

MetaRight

event.metaKey = true

Kontekstivalikko

93

ContextMenu

ContextMenu

Numeronäppäimistö (Numpad)

Näppäin

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 kerto

106

*

NumpadMultiply

Numpad plus

107

+

NumpadAdd

Numpad miinus

109

-

NumpadSubtract

Numpad desimaali

110

.

NumpadDecimal

Numpad jako

111

/

NumpadDivide

Toimintonäppäimet

Näppäin

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

Järjestelmä ja multimedia

Näppäin

event.which

event.key

event.code

Huomio

Num Lock

144

NumLock

NumLock

Scroll Lock

145

ScrollLock

ScrollLock

Mykistys

173

AudioVolumeMute

AudioVolumeMute

Firefoxissa event.which = 181, event.code = VolumeMute

Äänenvoimakkuuden vähennys

174

AudioVolumeDown

AudioVolumeDown

Firefoxissa event.which = 182, event.code = VolumeDown

Äänenvoimakkuuden lisäys

175

AudioVolumeUp

AudioVolumeUp

Firefoxissa event.which = 183, event.code = VolumeUp

Mediasoitin

181

LaunchMediaPlayer

LaunchMediaPlayer

Firefoxissa event.which = 0, event.code = MediaSelect

Käynnistä sovellus 1

182

LaunchApplication1

LaunchApplication1

Firefoxissa event.which = 0, event.code = LaunchApp1

Käynnistä sovellus 2

183

LaunchApplication2

LaunchApplication2

Firefoxissa event.which = 0, event.code = LaunchApp2

Välimerkit ja symbolit

Näppäin

event.which

event.key

event.code

Huomio

Puolipiste (;)

186

;

Semicolon

Firefoxissa event.which = 59

Yhtäsuuruus (=)

187

=

Equal

Firefoxissa event.which = 61

Pilkku (,)

188

,

Comma

Miinus (-)

189

-

Minus

Firefoxissa event.which = 173

Piste (.)

190

.

Period

Kauttaviiva (/)

191

/

Slash

Gravis () | 192 |

Backquote

Hakasulku vasen ([)

219

[

BracketLeft

Kenoviiva ()

220

\

Backslash

Hakasulku oikea (])

221

]

BracketRight

Heittomerkki (')

222

'

Quote

Tärkeitä huomioita taulukosta

  • event.which on vanhentunut ominaisuus, käytä event.key-ominaisuutta.
  • event.code on sama pienille (a) ja isoille (A) kirjaimille, se on fyysinen näppäin. event.key palauttaa todellisen merkin huomioiden kirjainkoon.
  • Firefoxissa event.which-arvot Equal-, Semicolon- ja Minus-näppäimille poikkeavat Chromesta/Edgestä/Safarista (merkitty taulukkoon). Toinen syy olla käyttämättä event.which-ominaisuutta.
  • Chromium-pohjaiset selaimet ja Firefox antavat samat event.key- ja event.code-arvot kaikille listatuille näppäimille.
  • Virtuaalinäppäimistöt: UI Events -määrittely vaatii, että virtuaalinäppäimistö (mobiili, ruudulla oleva), joka toistaa vakioasettelua, palauttaa oikean event.code-arvon. Käytännössä mobiiliselaimet (Chrome Android, Safari iOS) käsittelevät keydown/keyup-tapahtumat oikein päänäppäimille, mutta event.code voi olla tyhjä epästandardeille asetteluille.

Interaktiivinen harjoittelutyökalu

Interaktiivinen JavaScript-näppäimistötapahtumien harjoittelutyökalu

Minkä tahansa artikkelin koodin nopeaan tarkistamiseen käytä näppäimistöharjoittelutyökalua: keyevents.netlify.app. Siirrä kohdistin alueelle, paina näppäimiä ja näet event.key-, event.code- ja event.which-arvot sekä muokkausnäppäinten lippujen tilat reaaliajassa. Lähdekoodi on saatavilla GitHubissa.

Video: näppäimistötapahtumat käytännössä

Lyhyt käytännönläheinen purku keydown- ja keyup-tapahtumista, muokkausnäppäinten ja pikanäppäinten käsittelystä elävien esimerkkien kera:

⁉️🤔 Usein kysytyt kysymykset

Mitä eroa on event.key- ja event.code-ominaisuuksilla?

event.key palauttaa merkin arvon huomioiden asettelun ja kirjainkoon: A-näppäimelle se on "a" (tai "A" Shiftin kanssa), venäläiselle asettelulle "ф". event.code palauttaa fyysisen näppäinkoodin, joka on sama kaikille asetteluille: "KeyA". Pikanäppäimille event.code on luotettavampi, se ei riipu syöttökielestä. Tekstinsyöttöön käytä event.key-ominaisuutta.

Miksi keypress-tapahtumaa ei enää käytetä?

W3C-määrittely merkitsi keypress-tapahtuman vanhentuneeksi: se laukeaa vain merkin tuottaville näppäimille eikä havaitse muokkausnäppäimiä. Et voi käsitellä Ctrl+C-, Shift+Tab- ja muita yhdistelmiä keypress-tapahtuman kautta. keydown kattaa kaikki näppäimet ja sitä tuetaan samalla tavalla kaikissa nykyselaimissa.

Voiko event.which- ja event.keyCode-ominaisuuksista luopua kokonaan?

Kyllä, vuonna 2026 voit. event.key on tuettu Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Jos projektisi ei kohdistu IE11:een tai Firefox 28:aan, käytä vain event.key- ja event.code-ominaisuuksia.

Miten pitkä näppäimen painallus käsitellään?

Yhdistä keydown ja keyup. keydown-tapahtumassa käynnistä ajastin tai requestAnimationFrame, keyup-tapahtumassa nollaa se. Pelisyötteelle tämä on vakiomalli: näppäin on pohjassa, hahmo liikkuu, vapautetaan, pysähtyy.

Toimivatko näppäimistötapahtumat mobiililaitteilla?

keydown ja keyup toimivat mobiiliselaimissa, kun käytetään ulkoista Bluetooth-näppäimistöä. Ruudulla oleva näppäimistö tuottaa input-tapahtumia, ei keydown/keyup-tapahtumia kaikille näppäimille, joten mobiilissa tekstikentille on parempi käyttää input-tapahtumaa.

Miten erotat vasemman Shiftin oikeasta?

event.code-ominaisuuden kautta: "ShiftLeft" tai "ShiftRight". event.key palauttaa "Shift" molemmille. Sama pätee Control-, Alt- ja Meta-näppäimille.

Mitä käyttää projektissasi

Jos kirjoitat uutta koodia, ota keydown päätapahtumaksi ja näppäimen tunnistamiseen event.key (symboli) ja event.code (fyysinen näppäin). Tämä yhdistelmä kattaa kaikki skenaariot: pikanäppäimet, navigoinnin, pelisyötteen, lomakkeen validoinnin.

Jos ylläpidät tuotetta, jossa on vanhaa koodia event.which- tai event.keyCode-ominaisuuksilla, suunnittele refaktorointi. Työmäärä on pieni: korvaaminen käsittelijöissä, mutta hyöty on puhdas, ennustettava koodi ilman selainerojen viidakkoa.

Pidä yllä oleva taulukko kirjanmerkeissä. Kun seuraavan kerran tarvitset tietyn näppäimen koodin, avaa se ja kopioi tarvittava event.code-arvo ilman, että joudut muistelemaan numerokoodeja IE6-aikakaudelta.