
📋 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-tapahtumaakeypress-tapahtuman sijaan: se toimii kaikille näppäimille. event.keyantaa näppäimen symbolin,event.codepalauttaa sen fyysisen koodin.event.keyCodejaevent.whichovat 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.

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

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 |
|---|---|---|
| Painetun näppäimen merkin arvo: | Nykyinen |
| Näppäimen fyysinen koodi näppäimistöllä: | Nykyinen |
|
| Nykyinen |
|
| Nykyinen |
|
| Nykyinen |
|
| Nykyinen |
|
| Nykyinen |
| Numerinen näppäinkoodi (esimerkiksi | Vanhentunut |
| Merkin Unicode-koodi | Vanhentunut |
| Numerinen näppäinkoodi (vastaa | 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ä:
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 });
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:
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 });
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.
Navigointi ja toiminnot
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 |
|
Shift (oikea) | 16 | Shift | ShiftRight |
|
Ctrl (vasen) | 17 | Control | ControlLeft |
|
Ctrl (oikea) | 17 | Control | ControlRight |
|
Alt (vasen) | 18 | Alt | AltLeft |
|
Alt (oikea) | 18 | Alt | AltRight |
|
Pause / Break | 19 | Pause | Pause |
|
Caps Lock | 20 | CapsLock | CapsLock |
|
Escape | 27 | Escape | Escape |
|
Välilyönti | 32 |
| Space |
|
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 |
|
Oikea Windows | 92 | Meta | MetaRight |
|
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 |
Äänenvoimakkuuden vähennys | 174 | AudioVolumeDown | AudioVolumeDown | Firefoxissa |
Äänenvoimakkuuden lisäys | 175 | AudioVolumeUp | AudioVolumeUp | Firefoxissa |
Mediasoitin | 181 | LaunchMediaPlayer | LaunchMediaPlayer | Firefoxissa |
Käynnistä sovellus 1 | 182 | LaunchApplication1 | LaunchApplication1 | Firefoxissa |
Käynnistä sovellus 2 | 183 | LaunchApplication2 | LaunchApplication2 | Firefoxissa |
Välimerkit ja symbolit
Näppäin | event.which | event.key | event.code | Huomio |
|---|---|---|---|---|
Puolipiste (;) | 186 | ; | Semicolon | Firefoxissa |
Yhtäsuuruus (=) | 187 | = | Equal | Firefoxissa |
Pilkku ( | 188 |
| Comma |
|
Miinus (-) | 189 | - | Minus | Firefoxissa |
Piste (.) | 190 | . | Period |
|
Kauttaviiva (/) | 191 | / | Slash |
|
Gravis ( | Backquote |
|
|
|
Hakasulku vasen ([) | 219 | [ | BracketLeft |
|
Kenoviiva () | 220 | \ | Backslash |
|
Hakasulku oikea (]) | 221 | ] | BracketRight |
|
Heittomerkki (') | 222 | ' | Quote |
|
Tärkeitä huomioita taulukosta
event.whichon vanhentunut ominaisuus, käytäevent.key-ominaisuutta.event.codeon sama pienille (a) ja isoille (A) kirjaimille, se on fyysinen näppäin.event.keypalauttaa todellisen merkin huomioiden kirjainkoon.- Firefoxissa
event.which-arvotEqual-,Semicolon- jaMinus-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- jaevent.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ätkeydown/keyup-tapahtumat oikein päänäppäimille, muttaevent.codevoi olla tyhjä epästandardeille asetteluille.
Interaktiivinen 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.keypalauttaa merkin arvon huomioiden asettelun ja kirjainkoon: A-näppäimelle se on"a"(tai"A"Shiftin kanssa), venäläiselle asettelulle"ф".event.codepalauttaa fyysisen näppäinkoodin, joka on sama kaikille asetteluille:"KeyA". Pikanäppäimilleevent.codeon 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.keydownkattaa 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.keyon tuettu Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Jos projektisi ei kohdistu IE11:een tai Firefox 28:aan, käytä vainevent.key- jaevent.code-ominaisuuksia.
Miten pitkä näppäimen painallus käsitellään?
Yhdistä
keydownjakeyup.keydown-tapahtumassa käynnistä ajastin tairequestAnimationFrame,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?
keydownjakeyuptoimivat mobiiliselaimissa, kun käytetään ulkoista Bluetooth-näppäimistöä. Ruudulla oleva näppäimistö tuottaainput-tapahtumia, eikeydown/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.keypalauttaa"Shift"molemmille. Sama päteeControl-,Alt- jaMeta-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.



