
📋 Коди клавіш 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. Всередині, властивості самої клавіші, стан модифікаторів, інформація про розкладку.

Специфікація 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:
1 const input = document.getElementById('type-here'); 2 3 input.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:

Чому keydown, основний вибір
keypress офіційно визнано застарілим. Він спрацьовує тільки для клавіш, що продукують символьне значення, і не ловить модифікатори: ні Alt, ні Ctrl, ні Shift, ні Meta. Ctrl+Z або Shift+Tab через keypress не обробити.
Різниця між keydown і keyup: keydown спрацьовує до обробки клавіші браузером; keyup спрацьовує після. Звідси важливий наслідок: event.preventDefault() усередині keydown скасовує дію браузера (наприклад, введення символу в поле), а всередині keyup, ні. Для гарячих клавіш, валідації введення та ігрового керування потрібен саме keydown.
Таблиця властивостей KeyboardEvent
Властивість / Метод | Що повертає | Статус |
|---|---|---|
| Символьне значення натиснутої клавіші: | Актуально |
| Фізичний код клавіші на клавіатурі: | Актуально |
|
| Актуально |
|
| Актуально |
|
| Актуально |
|
| Актуально |
|
| Актуально |
| Числовий код клавіші (наприклад | Застаріло |
| Unicode-код символу | Застаріло |
| Числовий код клавіші (аналог | Застаріло |
Три нижні рядки, deprecated. Скрізь, де можливо, переходьте на event.key. Якщо доводиться підтримувати старий браузер, робіть fallback:
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 });
Але у 2026 році такий код, тільки для legacy-проєктів. event.key працює всюди.
Клавіші-модифікатори та комбінації
Клавіші Control, Shift, Alt і Meta самі по собі дій не виконують, але змінюють поведінку інших клавіш. Натискання Z дає літеру «z», а Ctrl+Z виконує скасування дії.
Відстежити модифікатор допомагають булеві властивості події:
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 });
Той самий підхід застосовний для будь-яких комбінацій: 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 |
|
Shift (правий) | 16 | Shift | ShiftRight |
|
Ctrl (лівий) | 17 | Control | ControlLeft |
|
Ctrl (правий) | 17 | Control | ControlRight |
|
Alt (лівий) | 18 | Alt | AltLeft |
|
Alt (правий) | 18 | Alt | AltRight |
|
Pause / Break | 19 | Pause | Pause |
|
Caps Lock | 20 | CapsLock | CapsLock |
|
Escape | 27 | Escape | Escape |
|
Space | 32 |
| Space |
|
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 |
|
Права Windows | 92 | Meta | MetaRight |
|
Контекстне меню | 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 |
Volume Down | 174 | AudioVolumeDown | AudioVolumeDown | У Firefox |
Volume Up | 175 | AudioVolumeUp | AudioVolumeUp | У Firefox |
Media Player | 181 | LaunchMediaPlayer | LaunchMediaPlayer | У Firefox |
Launch App 1 | 182 | LaunchApplication1 | LaunchApplication1 | У Firefox |
Launch App 2 | 183 | LaunchApplication2 | LaunchApplication2 | У Firefox |
Знаки пунктуації та символи
Клавіша | event.which | event.key | event.code | Примітка |
|---|---|---|---|---|
Semicolon (;) | 186 | ; | Semicolon | У Firefox |
Equal (=) | 187 | = | Equal | У Firefox |
Comma ( | 188 |
| Comma |
|
Minus (-) | 189 | - | Minus | У Firefox |
Period (.) | 190 | . | Period |
|
Slash (/) | 191 | / | Slash |
|
Backquote ( | 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може бути порожнім для нестандартних розкладок.
Інтерактивний тренажер

Для швидкої перевірки будь-якого коду зі статті використовуйте клавіатурний тренажер: 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.



