Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

📋 JavaScripti klahvikoodid: täielik tabel event.key, event.code ja event.which kohta

📋 JavaScripti klahvikoodid: täielik tabel event.key, event.code ja event.which kohta

Kasutaja vajutab Escape’i ja modaalaken ei sulgu. Ta vajutab otsinguväljal Enterit ja midagi ei juhtu. Tuttav olukord? Klaviatuurikäsitlus JavaScriptis tundub lihtne, kuni hakkad tegelema kolme sündmuse, tosina omaduse ja brauserierinevuste loomaaiaga.

Iga keydown või keyup tekitab KeyboardEvent objekti, millel on paarkümmend välja. Mõned on olnud aegunud juba IE ajastust, teised käituvad Firefoxis ja Chrome’is erinevalt. Ja MDN dokumentatsioon on täis „ära kasuta" märkusi. Arendajad ei vaja järjekordset spetsifikatsiooni, nad vajavad toimivat spikrilehte.

Allpool on täielik klaviatuurisündmuste teatmik: alates KeyboardEvent anatoomiast kuni valmis näidisteni kiirklahvide jaoks. Jäta kooditabel järjehoidjatesse, sul läheb seda vaja igas teises projektis.

💡 Kiirülevaade:

  • Kasuta keypress asemel keydown: see töötab kõigi klahvidega.
  • event.key annab klahvi sümboli, event.code tagastab selle füüsilise koodi.
  • event.keyCode ja event.which on aegunud, ära kasuta neid uues koodis.
  • Allolev tabel koondab kõigi standardsete klahvide koodid tänapäevastes brauserites.

Mis on KeyboardEvent sees

Kui kasutaja vajutab suvalist klahvi, loob brauser KeyboardEvent objekti, mis on UIEvent järglane, mis omakorda laiendab baas Event klassi. Sees on klahvi omadused, modifikaatorite olek, paigutuse teave.

JavaScripti KeyboardEvent liidese pärimishierarhia

UI Events spetsifikatsioon areneb edasi: uued omadused ilmuvad, vanad muutuvad aegunuks. Peamine muutus viimastel aastatel on eemaldumine numbrilistest koodidest (keyCode / charCode / which) event.key ja event.code kasuks. Kõik tänapäevased brauserid toetavad seda paari ja sa peaksid oma loogika neile üles ehitama.

Brauseritugi on peaaegu täielik: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Kui su projekt ei ole kinni IE11-s, võid event.which unustada.

Kolm sündmust: keydown, keypress ja keyup

Brauser eristab kolme klaviatuurisündmust. Käivitumise järjekord on fikseeritud:

  • keydown, klahv vajutatakse alla (kontakti hetk);
  • keypress, klahvi hoitakse all ja see genereerib märgi (ainult märgiklahvide puhul);
  • keyup, klahv vabastatakse.

keydown tellimine addEventListener kaudu:

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

Sisemiste töötlejate jaoks kasuta elemendi atribuuti:

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

Kui väljastad sündmuse objekti konsooli, näed täielikku struktuuri koos kõigi päritud väljadega UIEvent ja Event klassidest:

Keyup sündmuse objekt brauseri konsoolis kõigi KeyboardEvent omadustega

Miks keydown on peamine valik

keypress on ametlikult tunnistatud aegunuks. See käivitub ainult klahvide puhul, mis toodavad märgiväärtuse, ega taba modifikaatoreid: ei Alt, ei Ctrl, ei Shift, ei Meta. Sa ei saa keypress kaudu käsitleda Ctrl+Z või Shift+Tab.

Erinevus keydown ja keyup vahel: keydown käivitub enne, kui brauser klahvi töötleb; keyup käivitub pärast. Sellest tuleneb oluline tagajärg: event.preventDefault() keydown sees tühistab brauseri tegevuse (näiteks märgi sisestamise väljale), kuid keyup sees mitte. Kiirklahvide, sisendi valideerimise ja mängujuhtimise jaoks on vaja keydown.

KeyboardEvent omaduste tabel

Omadus / Meetod

Mida tagastab

Olek

event.key

Vajutatud klahvi märgiväärtus: "a", "Enter" või "ArrowUp"

Kehtiv

event.code

Klahvi füüsiline kood klaviatuuril: "KeyA", "Enter" või "ArrowUp"

Kehtiv

event.altKey

true, kui Alt on all

Kehtiv

event.ctrlKey

true, kui Control on all

Kehtiv

event.shiftKey

true, kui Shift on all

Kehtiv

event.metaKey

true, kui Meta on all (Windows / Macis Command)

Kehtiv

event.getModifierState()

true CapsLock, NumLock, Alt, Control, Shift või Meta klahvide aktiivse oleku korral

Kehtiv

event.keyCode

Numbriline klahvikood (näiteks 65 A jaoks)

Aegunud

event.charCode

Märgi Unicode kood

Aegunud

event.which

Numbriline klahvikood (analoogne keyCode-ga)

Aegunud

Kolm alumist rida on aegunud. Kus vähegi võimalik, mine üle event.key-le. Kui pead toetama vana brauserit, tee varuvariant:

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

Kuid aastal 2026 on selline kood ainult pärandprojektide jaoks. event.key töötab kõikjal.

Modifikaatoriklahvid ja kombinatsioonid

Control, Shift, Alt ja Meta klahvid ei tee ise toiminguid, vaid muudavad teiste klahvide käitumist. Z vajutamine annab tähe „z", samas kui Ctrl+Z teeb undo.

Sündmuse tõeväärtusomadused aitavad modifikaatorit jälgida:

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ähenemine kehtib kõigi kombinatsioonide puhul: Ctrl+S (salvesta), Ctrl+Shift+N (uus aken), Alt+Tab (vaheta). Kontrolli järjekorda: kõigepealt modifikaatorid tõeväärtuslippude kaudu, seejärel event.key konkreetse klahvi jaoks. See muudab loogika loetavaks, selle asemel et uppuda numbrilistesse koodidesse.

Täielik klahvikoodide tabel

Allpool on kehtiv tabel kõigi standardsete klahvide jaoks. Väärtused event.key ja event.code on antud nii, nagu tänapäevased brauserid (Chrome, Firefox, Edge, Safari) need tagastavad.

Klahv

event.which

event.key

event.code

Märkus

Backspace

8

Backspace

Backspace

Tab

9

Tab

Tab

Enter

13

Enter

Enter

Shift (vasak)

16

Shift

ShiftLeft

event.shiftKey = true

Shift (parem)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (vasak)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (parem)

17

Control

ControlRight

event.ctrlKey = true

Alt (vasak)

18

Alt

AltLeft

event.altKey = true

Alt (parem)

18

Alt

AltRight

event.altKey = true

Pause / Break

19

Pause

Pause

Caps Lock

20

CapsLock

CapsLock

Escape

27

Escape

Escape

Tühik

32

Space

event.key - üks tühik

Page Up

33

PageUp

PageUp

Page Down

34

PageDown

PageDown

End

35

End

End

Home

36

Home

Home

Nool vasakule

37

ArrowLeft

ArrowLeft

Nool üles

38

ArrowUp

ArrowUp

Nool paremale

39

ArrowRight

ArrowRight

Nool alla

40

ArrowDown

ArrowDown

Print Screen

44

PrintScreen

PrintScreen

Insert

45

Insert

Insert

Delete

46

Delete

Delete

Numbarida (põhiklaviatuur)

Klahv

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

Tähed A-Z

Klahv

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 tagastab tähtede puhul väiketähe väärtuse. event.code ei sõltu tõstust ega paigutusest: KeyA tähendab füüsilist A-klahvi, isegi kui paigutus on vene ja sisend on „Ф".

Erikohvid

Klahv

event.which

event.key

event.code

Märkus

Vasak Windows

91

Meta

MetaLeft

event.metaKey = true

Parem Windows

92

Meta

MetaRight

event.metaKey = true

Kontekstimenüü

93

ContextMenu

ContextMenu

Numbriklaviatuur (Numpad)

Klahv

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 korruta

106

*

NumpadMultiply

Numpad liida

107

+

NumpadAdd

Numpad lahuta

109

-

NumpadSubtract

Numpad koma

110

.

NumpadDecimal

Numpad jaga

111

/

NumpadDivide

Funktsiooniklahvid

Klahv

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

Süsteem ja multimeedia

Klahv

event.which

event.key

event.code

Märkus

Num Lock

144

NumLock

NumLock

Scroll Lock

145

ScrollLock

ScrollLock

Vaigista

173

AudioVolumeMute

AudioVolumeMute

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

Heli vaiksemaks

174

AudioVolumeDown

AudioVolumeDown

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

Heli valjemaks

175

AudioVolumeUp

AudioVolumeUp

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

Meediapleier

181

LaunchMediaPlayer

LaunchMediaPlayer

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

Käivita rakendus 1

182

LaunchApplication1

LaunchApplication1

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

Käivita rakendus 2

183

LaunchApplication2

LaunchApplication2

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

Kirjavahemärgid ja sümbolid

Klahv

event.which

event.key

event.code

Märkus

Semikoolon (;)

186

;

Semicolon

Firefoxis event.which = 59

Võrdusmärk (=)

187

=

Equal

Firefoxis event.which = 61

Koma (,)

188

,

Comma

Miinus (-)

189

-

Minus

Firefoxis event.which = 173

Punkt (.)

190

.

Period

Kaldkriips (/)

191

/

Slash

Ülakoma () | 192 |

Backquote

Nurksulg vasakule ([)

219

[

BracketLeft

Kurakriips ()

220

\

Backslash

Nurksulg paremale (])

221

]

BracketRight

Jutumärk (')

222

'

Quote

Olulised tabeli märkused

  • event.which on aegunud omadus, kasuta event.key.
  • event.code on väike- (a) ja suurtähtede (A) puhul identne, see on füüsiline klahv. event.key tagastab tegeliku märgi, arvestades tõstuga.
  • Firefoxis erinevad Equal, Semicolon ja Minus klahvide event.which väärtused Chrome/Edge/Safari omadest (tabelis märgitud). Veel üks põhjus, miks event.which mitte kasutada.
  • Chromium-põhised brauserid ja Firefox annavad kõigi loetletud klahvide puhul identsed event.key ja event.code väärtused.
  • Virtuaalsed klaviatuurid: UI Events spetsifikatsioon nõuab, et standardset paigutust kordav virtuaalne klaviatuur (mobiil, ekraanil) tagastaks korrektse event.code. Praktikas käsitlevad mobiilibrauserid (Chrome Android, Safari iOS) põhiklahvide keydown/keyup õigesti, kuid event.code võib mittestandardsete paigutuste puhul olla tühi.

Interaktiivne treener

Interaktiivne JavaScripti klaviatuurisündmuste treener

Artikli mis tahes koodi kiireks kontrollimiseks kasuta klaviatuuritreenerit: keyevents.netlify.app. Liiguta kursor alale, vajuta klahve ja näed reaalajas event.key, event.code ja event.which väärtusi, samuti modifikaatorilippude olekuid. Lähtekood on saadaval GitHubis.

Video: klaviatuurisündmused praktikas

Lühike praktiline ülevaade keydown ja keyup sündmustest, modifikaatorite ja kiirklahvidega töötamisest koos elavate näidetega:

⁉️🤔 Korduma kippuvad küsimused

Mis vahe on event.key ja event.code vahel?

event.key tagastab märgiväärtuse, arvestades paigutust ja tõstuga: A-klahvi puhul on see "a" (või "A" koos Shiftiga), vene paigutuse puhul "ф". event.code tagastab füüsilise klahvikoodi, mis on kõigi paigutuste jaoks identne: "KeyA". Kiirklahvide jaoks on event.code usaldusväärsem, see ei sõltu sisendkeelest. Tekstisisendi jaoks kasuta event.key.

Miks keypress enam ei kasutata?

W3C spetsifikatsioon märkis keypress aegunuks: see käivitub ainult märgiklahvide puhul ega taba modifikaatoreid. Sa ei saa keypress kaudu käsitleda Ctrl+C, Shift+Tab ja teisi kombinatsioone. keydown katab kõik klahvid ja on kõigis tänapäevastes brauserites identselt toetatud.

Kas event.which ja event.keyCode saab täielikult hüljata?

Jah, aastal 2026 saab. event.key on toetatud Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Kui su projekt ei sihi IE11 või Firefox 28, kasuta ainult event.key ja event.code.

Kuidas käsitleda pikka klahvivajutust?

Kombineeri keydown ja keyup. keydown puhul käivita taimer või requestAnimationFrame, keyup puhul lähtesta see. Mängusisendi jaoks on see standardmuster: klahv all, tegelane liigub, vabastatud, peatub.

Kas klaviatuurisündmused töötavad mobiilseadmetes?

keydown ja keyup töötavad mobiilibrauserites välise Bluetooth-klaviatuuri kasutamisel. Ekraaniklaviatuur genereerib input sündmusi, mitte keydown/keyup kõigi klahvide jaoks, seega on mobiilis tekstiväljade puhul parem kasutada input sündmust.

Kuidas eristada vasakut Shifti paremast?

event.code kaudu: "ShiftLeft" või "ShiftRight". event.key tagastab mõlema puhul "Shift". Sama kehtib Control, Alt ja Meta kohta.

Mida oma projektis kasutada

Kui kirjutad uut koodi, võta põhisündmuseks keydown ning klahvi tuvastamiseks event.key (sümbol) ja event.code (füüsiline klahv). See kombinatsioon katab kõik stsenaariumid: kiirklahvid, navigeerimine, mängusisend, vormi valideerimine.

Kui hooldad toodet, millel on pärandkood event.which või event.keyCode põhjal, planeeri ümberkujundamine. Töö maht on väike: asendamine töötlejates, kuid kasu on puhas, ennustatav kood ilma brauserierinevuste loomaaiata.

Hoia ülaltoodud tabel järjehoidjates. Kui järgmine kord vajad konkreetse klahvi koodi, ava see ja kopeeri vajalik event.code väärtus, ilma et peaksid meenutama numbrilisi koode IE6 ajastust.