Skip to content

Все для WordPress, веб-розробки — і не тільки

📋 Коди клавіш JavaScript: повна таблиця event.key, event.code та event.which

📋 Коди клавіш JavaScript: повна таблиця event.key, event.code та event.which

Користувач тисне Escape, а модалка не закривається. Натискає Enter у полі пошуку, і нічого. Знайомо? Обробка клавіатури в JavaScript виглядає просто, поки не починаєш розбиратися в трьох подіях, десятку властивостей і зоопарку браузерних відмінностей.

Кожен keydown або keyup породжує об’єкт KeyboardEvent із двома десятками полів. Частина з них застаріла ще з епохи IE, частина поводиться по-різному в Firefox і Chrome. А документація MDN рясніє примітками «не використовуйте». Розробнику потрібна не ще одна специфікація, а шпаргалка, яка працює.

Нижче, повний довідник із клавіатурних подій: від анатомії KeyboardEvent до готових сніпетів для гарячих клавіш. Таблицю кодів тримайте в закладках, вона знадобиться в кожному другому проєкті.

💡 Швидкий огляд:

  • Використовуйте keydown замість keypress: він працює для будь-яких клавіш.
  • event.key дає символ клавіші, event.code повертає її фізичний код.
  • event.keyCode та event.which застаріли, у новому коді не застосовуйте.
  • У таблиці нижче зібрано коди всіх стандартних клавіш для сучасних браузерів.

Що всередині KeyboardEvent

Коли користувач натискає будь-яку клавішу, браузер створює об’єкт KeyboardEvent, нащадок UIEvent, який, своєю чергою, розширює базовий Event. Всередині, властивості самої клавіші, стан модифікаторів, інформація про розкладку.

Ієрархія успадкування інтерфейсу KeyboardEvent у JavaScript

Специфікація UI Events розвивається: з’являються нові властивості, старі переходять у deprecated. Головна зміна останніх років, відмова від числових кодів (keyCode / charCode / which) на користь event.key та event.code. Усі сучасні браузери підтримують цю пару, і будувати логіку варто саме на них.

Підтримка браузерами практично повна: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Якщо ваш проєкт не тримається за IE11, можна забути про event.which.

Три події: keydown, keypress і keyup

Браузер розрізняє три клавіатурні події. Порядок спрацьовування фіксований:

  • keydown, клавішу натиснуто (момент торкання);
  • keypress, клавішу утримують і вона генерує символ (тільки для символьних клавіш);
  • keyup, клавішу відпущено.

Підписка на keydown через addEventListener:

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

Для inline-обробників, атрибут елемента:

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

Якщо вивести об’єкт події в консоль, побачите повну структуру з усіма успадкованими полями від UIEvent та Event:

Об&#39;єкт події keyup у консолі браузера з усіма властивостями KeyboardEvent

Чому keydown, основний вибір

keypress офіційно визнано застарілим. Він спрацьовує тільки для клавіш, що продукують символьне значення, і не ловить модифікатори: ні Alt, ні Ctrl, ні Shift, ні Meta. Ctrl+Z або Shift+Tab через keypress не обробити.

Різниця між keydown і keyup: keydown спрацьовує до обробки клавіші браузером; keyup спрацьовує після. Звідси важливий наслідок: event.preventDefault() усередині keydown скасовує дію браузера (наприклад, введення символу в поле), а всередині keyup, ні. Для гарячих клавіш, валідації введення та ігрового керування потрібен саме keydown.

Таблиця властивостей KeyboardEvent

Властивість / Метод

Що повертає

Статус

event.key

Символьне значення натиснутої клавіші: "a", "Enter" або "ArrowUp"

Актуально

event.code

Фізичний код клавіші на клавіатурі: "KeyA", "Enter" або "ArrowUp"

Актуально

event.altKey

true, якщо затиснуто Alt

Актуально

event.ctrlKey

true, якщо затиснуто Control

Актуально

event.shiftKey

true, якщо затиснуто Shift

Актуально

event.metaKey

true, якщо затиснуто Meta (Windows / Command на Mac)

Актуально

event.getModifierState()

true для активного стану клавіш CapsLock, NumLock, Alt, Control, Shift або Meta

Актуально

event.keyCode

Числовий код клавіші (наприклад 65 для A)

Застаріло

event.charCode

Unicode-код символу

Застаріло

event.which

Числовий код клавіші (аналог keyCode)

Застаріло

Три нижні рядки, deprecated. Скрізь, де можливо, переходьте на event.key. Якщо доводиться підтримувати старий браузер, робіть 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});

Але у 2026 році такий код, тільки для legacy-проєктів. event.key працює всюди.

Клавіші-модифікатори та комбінації

Клавіші Control, Shift, Alt і Meta самі по собі дій не виконують, але змінюють поведінку інших клавіш. Натискання Z дає літеру «z», а Ctrl+Z виконує скасування дії.

Відстежити модифікатор допомагають булеві властивості події:

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

Той самий підхід застосовний для будь-яких комбінацій: Ctrl+S (зберегти), Ctrl+Shift+N (нове вікно), Alt+Tab (перемикання). Порядок перевірки: спочатку модифікатори через булеві прапорці, потім event.key для конкретної клавіші. Так логіка читається, а не тоне в числових кодах.

Повна таблиця кодів клавіш

Нижче, актуальна таблиця для всіх стандартних клавіш. Значення event.key та event.code подано так, як їх повертають сучасні браузери (Chrome, Firefox, Edge, Safari).

Клавіша

event.which

event.key

event.code

Примітка

Backspace

8

Backspace

Backspace

Tab

9

Tab

Tab

Enter

13

Enter

Enter

Shift (лівий)

16

Shift

ShiftLeft

event.shiftKey = true

Shift (правий)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (лівий)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (правий)

17

Control

ControlRight

event.ctrlKey = true

Alt (лівий)

18

Alt

AltLeft

event.altKey = true

Alt (правий)

18

Alt

AltRight

event.altKey = true

Pause / Break

19

Pause

Pause

Caps Lock

20

CapsLock

CapsLock

Escape

27

Escape

Escape

Space

32

Space

event.key, одиночний пробіл

Page Up

33

PageUp

PageUp

Page Down

34

PageDown

PageDown

End

35

End

End

Home

36

Home

Home

Arrow Left

37

ArrowLeft

ArrowLeft

Arrow Up

38

ArrowUp

ArrowUp

Arrow Right

39

ArrowRight

ArrowRight

Arrow Down

40

ArrowDown

ArrowDown

Print Screen

44

PrintScreen

PrintScreen

Insert

45

Insert

Insert

Delete

46

Delete

Delete

Цифровий ряд (основна клавіатура)

Клавіша

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

Літери A-Z

Клавіша

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 повертає значення в нижньому регістрі для літер. event.code не залежить від регістру та розкладки: KeyA означає фізичну клавішу A, навіть якщо розкладка українська і вводиться «Ф».

Спеціальні клавіші

Клавіша

event.which

event.key

event.code

Примітка

Ліва Windows

91

Meta

MetaLeft

event.metaKey = true

Права Windows

92

Meta

MetaRight

event.metaKey = true

Контекстне меню

93

ContextMenu

ContextMenu

Цифрова клавіатура (Numpad)

Клавіша

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 Multiply

106

*

NumpadMultiply

Numpad Add

107

+

NumpadAdd

Numpad Subtract

109

-

NumpadSubtract

Numpad Decimal

110

.

NumpadDecimal

Numpad Divide

111

/

NumpadDivide

Функціональні клавіші

Клавіша

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

Системні та мультимедійні

Клавіша

event.which

event.key

event.code

Примітка

Num Lock

144

NumLock

NumLock

Scroll Lock

145

ScrollLock

ScrollLock

Mute

173

AudioVolumeMute

AudioVolumeMute

У Firefox event.which = 181, event.code = VolumeMute

Volume Down

174

AudioVolumeDown

AudioVolumeDown

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

Volume Up

175

AudioVolumeUp

AudioVolumeUp

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

Media Player

181

LaunchMediaPlayer

LaunchMediaPlayer

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

Launch App 1

182

LaunchApplication1

LaunchApplication1

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

Launch App 2

183

LaunchApplication2

LaunchApplication2

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

Знаки пунктуації та символи

Клавіша

event.which

event.key

event.code

Примітка

Semicolon (;)

186

;

Semicolon

У Firefox event.which = 59

Equal (=)

187

=

Equal

У Firefox event.which = 61

Comma (,)

188

,

Comma

Minus (-)

189

-

Minus

У Firefox event.which = 173

Period (.)

190

.

Period

Slash (/)

191

/

Slash

Backquote () | 192 |

Backquote

Bracket Left ([)

219

[

BracketLeft

Backslash ()

220

\

Backslash

Bracket Right (])

221

]

BracketRight

Quote (')

222

'

Quote

Важливі зауваження до таблиці

  • event.which, застаріла властивість, використовуйте event.key.
  • event.code однаковий для малої (a) та великої (A) літери — це фізична клавіша. event.key повертає фактичний символ з урахуванням регістру.
  • У Firefox значення event.which для клавіш Equal, Semicolon і Minus відрізняються від Chrome/Edge/Safari (зазначено в примітках). Ще одна причина не використовувати event.which.
  • Браузери на основі Chromium і Firefox дають однакові event.key та event.code для всіх перелічених клавіш.
  • Віртуальні клавіатури: специфікація UI Events вимагає, щоб віртуальна клавіатура (мобільна, екранна), яка повторює розкладку стандартної, повертала коректні event.code. На практиці мобільні браузери (Chrome Android, Safari iOS) коректно обробляють keydown/keyup для основних клавіш, але event.code може бути порожнім для нестандартних розкладок.

Інтерактивний тренажер

Інтерактивний тренажер клавіатурних подій JavaScript

Для швидкої перевірки будь-якого коду зі статті використовуйте клавіатурний тренажер: keyevents.netlify.app. Наводьте курсор на область, натискайте клавіші та дивіться значення event.key, event.code і event.which, а також стан прапорців модифікаторів у реальному часі. Вихідний код доступний на GitHub.

Відео: клавіатурні події на практиці

Короткий практичний розбір keydown і keyup, роботи модифікаторів і гарячих клавіш із живими прикладами:

⁉️🤔 Часті запитання

Чим event.key відрізняється від event.code?

event.key повертає символьне значення з урахуванням розкладки та регістру: для клавіші A це "a" (або "A" з Shift), для української розкладки, "ф". event.code повертає фізичний код клавіші, однаковий для всіх розкладок: "KeyA". Для гарячих клавіш надійніше event.code, він не залежить від мови введення. Для текстового введення використовуйте event.key.

Чому keypress більше не використовують?

Специфікація W3C позначила keypress як застарілий: він спрацьовує тільки для символьних клавіш і не ловить модифікатори. Ctrl+C, Shift+Tab та інші комбінації через keypress не обробити. keydown покриває всі клавіші та підтримується однаково в усіх сучасних браузерах.

Чи можна повністю відмовитися від event.which і event.keyCode?

Так, у 2026 році можна. event.key підтримується Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Якщо ваш проєкт не націлений на IE11 або Firefox 28, використовуйте тільки event.key та event.code.

Як обробити довге натискання клавіші?

Поєднуйте keydown і keyup. При keydown запускайте таймер або requestAnimationFrame, при keyup, скидайте. Для ігрового введення це стандартний патерн: клавішу затиснуто, персонаж рухається, відпущено, зупиняється.

Клавіатурні події працюють на мобільних пристроях?

keydown і keyup працюють у мобільних браузерах при використанні зовнішньої Bluetooth-клавіатури. Екранна клавіатура генерує події input, а не keydown/keyup для всіх клавіш, тому для текстових полів на мобільних краще використовувати подію input.

Як відрізнити лівий Shift від правого?

Через event.code: "ShiftLeft" або "ShiftRight". event.key для обох повертає "Shift". Аналогічно для Control, Alt і Meta.

Що використовувати у вашому проєкті

Якщо пишете новий код, беріть keydown як основну подію, а для ідентифікації клавіш, event.key (символ) і event.code (фізична клавіша). Зв’язка покриває всі сценарії: гарячі клавіші, навігацію, ігрове введення, валідацію форм.

Підтримуєте продукт із legacy-кодом на event.which або event.keyCode, заплануйте рефакторинг. Обсяг роботи невеликий: заміна в обробниках, а профіт, чистий, передбачуваний код без зоопарку браузерних відмінностей.

Тримайте таблицю вище в закладках. Коли наступного разу знадобиться код конкретної клавіші, відкривайте й копіюйте потрібне значення event.code, не згадуючи числові коди з епохи IE6.