Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

📋 Codici tasto JavaScript: tabella completa di event.key, event.code e event.which

📋 Codici tasto JavaScript: tabella completa di event.key, event.code e event.which

Un utente preme Escape e la modale non si chiude. Preme Invio nel campo di ricerca e non succede nulla. Ti suona familiare? La gestione della tastiera in JavaScript sembra semplice finché non inizi ad avere a che fare con tre eventi, una dozzina di proprietà e uno zoo di differenze tra browser.

Ogni keydown o keyup genera un oggetto KeyboardEvent con due dozzine di campi. Alcuni sono deprecati dall'era di IE, altri si comportano diversamente in Firefox e Chrome. E la documentazione MDN è piena di note «non utilizzare». Gli sviluppatori non hanno bisogno di un'altra specifica, hanno bisogno di un cheat sheet che funzioni.

Quella che segue è una guida di riferimento completa sugli eventi di tastiera: dall'anatomia del KeyboardEvent a snippet pronti all'uso per le scorciatoie da tastiera. Tieni la tabella dei codici tra i preferiti, ti servirà in un progetto su due.

💡 Panoramica rapida:

  • Usa keydown invece di keypress: funziona per qualsiasi tasto.
  • event.key restituisce il simbolo del tasto, event.code restituisce il suo codice fisico.
  • event.keyCode e event.which sono deprecati, non usarli nel nuovo codice.
  • La tabella seguente raccoglie i codici per tutti i tasti standard nei browser moderni.

Cosa c'è dentro KeyboardEvent

Quando un utente preme un tasto qualsiasi, il browser crea un oggetto KeyboardEvent, discendente di UIEvent, che a sua volta estende l'Event di base. Al suo interno ci sono le proprietà del tasto, lo stato dei modificatori, le informazioni sul layout.

Gerarchia di ereditarietà dell'interfaccia KeyboardEvent in JavaScript

La specifica UI Events è in evoluzione: compaiono nuove proprietà, quelle vecchie vengono deprecate. Il cambiamento principale degli ultimi anni è l'abbandono dei codici numerici (keyCode / charCode / which) a favore di event.key e event.code. Tutti i browser moderni supportano questa coppia e dovresti costruire la tua logica su di essi.

Il supporto dei browser è quasi completo: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Se il tuo progetto non è bloccato su IE11, puoi dimenticarti di event.which.

Tre eventi: keydown, keypress e keyup

Il browser distingue tre eventi di tastiera. L'ordine di esecuzione è fisso:

  • keydown, il tasto viene premuto (momento del contatto);
  • keypress, il tasto è tenuto premuto e genera un carattere (solo per i tasti carattere);
  • keyup, il tasto viene rilasciato.

Sottoscrizione a keydown tramite addEventListener:

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

Per i gestori inline, usa un attributo dell'elemento:

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

Se stampi l'oggetto evento nella console, vedrai la struttura completa con tutti i campi ereditati da UIEvent ed Event:

Oggetto evento keyup nella console del browser con tutte le proprietà KeyboardEvent

Perché keydown è la scelta principale

keypress è ufficialmente riconosciuto come deprecato. Si attiva solo per i tasti che producono un valore carattere e non intercetta i modificatori: non Alt, non Ctrl, non Shift, non Meta. Non puoi gestire Ctrl+Z o Shift+Tab tramite keypress.

La differenza tra keydown e keyup: keydown si attiva prima che il browser elabori il tasto; keyup si attiva dopo. Ne consegue un aspetto importante: event.preventDefault() dentro keydown annulla l'azione del browser (ad esempio, l'inserimento di un carattere in un campo), ma dentro keyup non lo fa. Per scorciatoie, validazione dell'input e controlli di gioco, ti serve keydown.

Tabella delle proprietà di KeyboardEvent

Proprietà / Metodo

Cosa restituisce

Stato

event.key

Valore carattere del tasto premuto: "a", "Enter" o "ArrowUp"

Corrente

event.code

Codice fisico del tasto sulla tastiera: "KeyA", "Enter" o "ArrowUp"

Corrente

event.altKey

true se Alt è premuto

Corrente

event.ctrlKey

true se Control è premuto

Corrente

event.shiftKey

true se Shift è premuto

Corrente

event.metaKey

true se Meta è premuto (Windows / Command su Mac)

Corrente

event.getModifierState()

true per lo stato attivo di CapsLock, NumLock, Alt, Control, Shift o Meta

Corrente

event.keyCode

Codice numerico del tasto (ad esempio 65 per A)

Deprecato

event.charCode

Codice Unicode del carattere

Deprecato

event.which

Codice numerico del tasto (analogo a keyCode)

Deprecato

Le ultime tre righe sono deprecate. Dove possibile, passa a event.key. Se devi supportare un vecchio browser, crea un 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});

Ma nel 2026, questo codice serve solo per progetti legacy. event.key funziona ovunque.

Tasti modificatori e combinazioni

I tasti Control, Shift, Alt e Meta non eseguono azioni di per sé, ma modificano il comportamento di altri tasti. Premere Z produce la lettera "z", mentre Ctrl+Z esegue l'annullamento.

Le proprietà booleane dell'evento aiutano a tracciare un modificatore:

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

Lo stesso approccio si applica a qualsiasi combinazione: Ctrl+S (salva), Ctrl+Shift+N (nuova finestra), Alt+Tab (cambia). Controlla l'ordine: prima i modificatori tramite flag booleani, poi event.key per il tasto specifico. Questo rende la logica leggibile invece di annegarla in codici numerici.

Tabella completa dei codici tasto

Di seguito la tabella aggiornata per tutti i tasti standard. I valori event.key e event.code sono riportati come li restituiscono i browser moderni (Chrome, Firefox, Edge, Safari).

Tasto

event.which

event.key

event.code

Nota

Backspace

8

Backspace

Backspace

Tab

9

Tab

Tab

Invio

13

Enter

Enter

Shift (sinistro)

16

Shift

ShiftLeft

event.shiftKey = true

Shift (destro)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (sinistro)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (destro)

17

Control

ControlRight

event.ctrlKey = true

Alt (sinistro)

18

Alt

AltLeft

event.altKey = true

Alt (destro)

18

Alt

AltRight

event.altKey = true

Pausa / Interr

19

Pause

Pause

Bloc Maiusc

20

CapsLock

CapsLock

Escape

27

Escape

Escape

Spazio

32

Space

event.key - spazio singolo

Pag Su

33

PageUp

PageUp

Pag Giù

34

PageDown

PageDown

Fine

35

End

End

Home

36

Home

Home

Freccia Sinistra

37

ArrowLeft

ArrowLeft

Freccia Su

38

ArrowUp

ArrowUp

Freccia Destra

39

ArrowRight

ArrowRight

Freccia Giù

40

ArrowDown

ArrowDown

Stamp

44

PrintScreen

PrintScreen

Ins

45

Insert

Insert

Canc

46

Delete

Delete

Riga numerica (tastiera principale)

Tasto

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

Lettere A-Z

Tasto

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 restituisce il valore minuscolo per le lettere. event.code non dipende da maiuscole/minuscole o layout: KeyA indica il tasto fisico A, anche se il layout è russo e l'input è "Ф".

Tasti speciali

Tasto

event.which

event.key

event.code

Nota

Windows sinistro

91

Meta

MetaLeft

event.metaKey = true

Windows destro

92

Meta

MetaRight

event.metaKey = true

Menu contestuale

93

ContextMenu

ContextMenu

Tastierino numerico (Numpad)

Tasto

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 Moltiplica

106

*

NumpadMultiply

Numpad Addizione

107

+

NumpadAdd

Numpad Sottrai

109

-

NumpadSubtract

Numpad Decimale

110

.

NumpadDecimal

Numpad Dividi

111

/

NumpadDivide

Tasti funzione

Tasto

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

Sistema e multimediali

Tasto

event.which

event.key

event.code

Nota

Bloc Num

144

NumLock

NumLock

Bloc Scorr

145

ScrollLock

ScrollLock

Muto

173

AudioVolumeMute

AudioVolumeMute

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

Volume Giù

174

AudioVolumeDown

AudioVolumeDown

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

Volume Su

175

AudioVolumeUp

AudioVolumeUp

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

Media Player

181

LaunchMediaPlayer

LaunchMediaPlayer

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

Avvia App 1

182

LaunchApplication1

LaunchApplication1

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

Avvia App 2

183

LaunchApplication2

LaunchApplication2

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

Punteggiatura e simboli

Tasto

event.which

event.key

event.code

Nota

Punto e virgola (;)

186

;

Semicolon

In Firefox event.which = 59

Uguale (=)

187

=

Equal

In Firefox event.which = 61

Virgola (,)

188

,

Comma

Meno (-)

189

-

Minus

In Firefox event.which = 173

Punto (.)

190

.

Period

Barra (/)

191

/

Slash

Accento grave () | 192 |

Backquote

Parentesi quadra sinistra ([)

219

[

BracketLeft

Barra rovesciata ()

220

\

Backslash

Parentesi quadra destra (])

221

]

BracketRight

Apice (')

222

'

Quote

Note importanti sulla tabella

  • event.which è una proprietà deprecata, usa event.key.
  • event.code è identico per le lettere minuscole (a) e maiuscole (A), è il tasto fisico. event.key restituisce il carattere effettivo considerando maiuscole/minuscole.
  • In Firefox, i valori event.which per i tasti Equal, Semicolon e Minus differiscono da Chrome/Edge/Safari (annotato in tabella). Un altro motivo per non usare event.which.
  • I browser basati su Chromium e Firefox restituiscono event.key e event.code identici per tutti i tasti elencati.
  • Tastiere virtuali: la specifica UI Events richiede che una tastiera virtuale (mobile, su schermo) che replica un layout standard restituisca event.code corretto. In pratica, i browser mobile (Chrome Android, Safari iOS) gestiscono correttamente keydown/keyup per i tasti principali, ma event.code potrebbe essere vuoto per layout non standard.

Trainer interattivo

Trainer interattivo per eventi di tastiera JavaScript

Per una verifica rapida di qualsiasi codice dell'articolo, usa il trainer di tastiera: keyevents.netlify.app. Sposta il cursore nell'area, premi i tasti e vedi in tempo reale i valori di event.key, event.code e event.which, oltre allo stato dei flag dei modificatori. Il codice sorgente è disponibile su GitHub.

Video: eventi di tastiera in pratica

Un'analisi pratica breve di keydown e keyup, con gestione di modificatori e scorciatoie ed esempi dal vivo:

⁉️🤔 Domande frequenti

Qual è la differenza tra event.key e event.code?

event.key restituisce il valore carattere considerando layout e maiuscole/minuscole: per il tasto A è "a" (o "A" con Shift), per il layout russo, "ф". event.code restituisce il codice fisico del tasto, identico per tutti i layout: "KeyA". Per le scorciatoie, event.code è più affidabile, non dipende dalla lingua di input. Per l'inserimento di testo, usa event.key.

Perché keypress non si usa più?

La specifica W3C ha marcato keypress come deprecato: si attiva solo per i tasti carattere e non intercetta i modificatori. Non puoi gestire Ctrl+C, Shift+Tab e altre combinazioni tramite keypress. keydown copre tutti i tasti ed è supportato in modo identico in tutti i browser moderni.

Si può abbandonare completamente event.which e event.keyCode?

Sì, nel 2026 puoi farlo. event.key è supportato in Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Se il tuo progetto non ha come target IE11 o Firefox 28, usa solo event.key e event.code.

Come si gestisce la pressione prolungata di un tasto?

Combina keydown e keyup. Su keydown avvia un timer o requestAnimationFrame, su keyup azzeralo. Per l'input di gioco, questo è il pattern standard: tasto premuto, il personaggio si muove, rilasciato, si ferma.

Gli eventi di tastiera funzionano sui dispositivi mobili?

keydown e keyup funzionano nei browser mobile quando si usa una tastiera Bluetooth esterna. La tastiera su schermo genera eventi input, non keydown/keyup per tutti i tasti, quindi per i campi di testo su mobile è meglio usare l'evento input.

Come si distingue lo Shift sinistro da quello destro?

Tramite event.code: "ShiftLeft" o "ShiftRight". event.key restituisce "Shift" per entrambi. Lo stesso vale per Control, Alt e Meta.

Cosa usare nel tuo progetto

Se stai scrivendo nuovo codice, prendi keydown come evento principale e, per l'identificazione del tasto, event.key (simbolo) e event.code (tasto fisico). Questa combinazione copre tutti gli scenari: scorciatoie da tastiera, navigazione, input di gioco, validazione form.

Se mantieni un prodotto con codice legacy basato su event.which o event.keyCode, pianifica un refactoring. Il volume di lavoro è ridotto: sostituzione nei gestori, ma il beneficio è un codice pulito e prevedibile senza uno zoo di differenze tra browser.

Tieni la tabella qui sopra tra i preferiti. La prossima volta che ti serve il codice per un tasto specifico, aprila e copia il valore event.code che ti serve, senza dover ricordare codici numerici dell'era di IE6.