Skip to content

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

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

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

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

Каждый keydown или keyup порождает объект KeyboardEvent с двумя десятками полей. Часть из них, deprecated ещё с эпохи 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:

Объект события 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.