Skip to content

Tout pour WordPress, le développement web — et plus encore

📋 Codes de touches JavaScript : tableau complet de event.key, event.code et event.which

📋 Codes de touches JavaScript : tableau complet de event.key, event.code et event.which

Un utilisateur appuie sur Échap, et la modale ne se ferme pas. Il tape Entrée dans le champ de recherche, et rien ne se produit. Cela vous semble familier? La gestion du clavier en JavaScript paraît simple jusqu’à ce que vous commenciez à jongler avec trois événements, une douzaine de propriétés et une jungle de différences entre navigateurs.

Chaque keydown ou keyup génère un objet KeyboardEvent doté d’une vingtaine de champs. Certains sont dépréciés depuis l’époque d’IE, d’autres se comportent différemment sous Firefox et Chrome. Et la documentation MDN est truffée de mentions «ne pas utiliser». Les développeurs n’ont pas besoin d’une énième spécification, ils ont besoin d’un aide-mémoire qui fonctionne.

Voici une référence complète sur les événements clavier: de l’anatomie de KeyboardEvent jusqu’aux extraits prêts à l’emploi pour les raccourcis clavier. Gardez le tableau de codes en favori, vous en aurez besoin dans pratiquement tous vos projets.

💡 Aperçu rapide:

  • Utilisez keydown plutôt que keypress: il fonctionne pour toutes les touches.
  • event.key donne le symbole de la touche, event.code renvoie son code physique.
  • event.keyCode et event.which sont dépréciés, ne les utilisez plus dans du nouveau code.
  • Le tableau ci-dessous regroupe les codes pour toutes les touches standard dans les navigateurs modernes.

Ce que contient un KeyboardEvent

Lorsqu’un utilisateur appuie sur une touche, le navigateur crée un objet KeyboardEvent, descendant de UIEvent, qui étend lui-même l’objet Event de base. On y trouve les propriétés de la touche, l’état des modificateurs et les informations de disposition du clavier.

Hiérarchie d'héritage de l'interface KeyboardEvent en JavaScript

La spécification UI Events évolue: de nouvelles propriétés apparaissent, d’anciennes deviennent dépréciées. Le principal changement de ces dernières années est l’abandon des codes numériques (keyCode / charCode / which) au profit de event.key et event.code. Tous les navigateurs modernes prennent en charge ce duo, et vous devriez bâtir votre logique sur eux.

La prise en charge par les navigateurs est quasi complète: Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Si votre projet n’est pas bloqué sur IE11, vous pouvez oublier event.which.

Trois événements: keydown, keypress et keyup

Le navigateur distingue trois événements clavier. L’ordre de déclenchement est fixe:

  • keydown, la touche est enfoncée (moment du contact);
  • keypress, la touche est maintenue et génère un caractère (uniquement pour les touches de caractère);
  • keyup, la touche est relâchée.

S’abonner à keydown via addEventListener:

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

Pour les gestionnaires en ligne, utilisez un attribut d’élément:

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

Si vous affichez l’objet événement dans la console, vous verrez la structure complète avec tous les champs hérités de UIEvent et Event:

Objet événement keyup dans la console du navigateur avec toutes les propriétés KeyboardEvent

Pourquoi keydown est le choix principal

keypress est officiellement reconnu comme déprécié. Il ne se déclenche que pour les touches produisant une valeur de caractère et ne capture pas les modificateurs: ni Alt, ni Ctrl, ni Shift, ni Meta. Vous ne pouvez pas gérer Ctrl+Z ou Shift+Tab via keypress.

La différence entre keydown et keyup: keydown se déclenche avant que le navigateur ne traite la touche; keyup se déclenche après. Une conséquence importante en découle: event.preventDefault() dans keydown annule l’action du navigateur (par exemple, la saisie d’un caractère dans un champ), mais dans keyup, cela ne fonctionne pas. Pour les raccourcis, la validation de saisie et les contrôles de jeu, vous avez besoin de keydown.

Tableau des propriétés de KeyboardEvent

Propriété / Méthode

Ce qu’elle renvoie

Statut

event.key

Valeur caractère de la touche pressée: "a", "Enter" ou "ArrowUp"

Actuel

event.code

Code physique de la touche sur le clavier: "KeyA", "Enter" ou "ArrowUp"

Actuel

event.altKey

true si Alt est maintenue

Actuel

event.ctrlKey

true si Control est maintenue

Actuel

event.shiftKey

true si Shift est maintenue

Actuel

event.metaKey

true si Meta est maintenue (Windows / Commande sur Mac)

Actuel

event.getModifierState()

true pour l’état actif des touches CapsLock, NumLock, Alt, Control, Shift ou Meta

Actuel

event.keyCode

Code numérique de la touche (par exemple 65 pour A)

Déprécié

event.charCode

Code Unicode du caractère

Déprécié

event.which

Code numérique de la touche (analogue à keyCode)

Déprécié

Les trois dernières lignes sont dépréciées. Partout où c’est possible, passez à event.key. Si vous devez prendre en charge un ancien navigateur, prévoyez une solution de repli:

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

Mais en 2026, ce type de code ne concerne que les projets legacy. event.key fonctionne partout.

Touches modificatrices et combinaisons

Les touches Control, Shift, Alt et Meta n’effectuent pas d’actions par elles-mêmes, mais modifient le comportement des autres touches. Appuyer sur Z donne la lettre «z», tandis que Ctrl+Z déclenche l’annulation.

Les propriétés booléennes de l’événement aident à suivre un modificateur:

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

La même approche s’applique à toutes les combinaisons: Ctrl+S (enregistrer), Ctrl+Shift+N (nouvelle fenêtre), Alt+Tab (basculer). Vérifiez dans l’ordre: d’abord les modificateurs via les indicateurs booléens, puis event.key pour la touche spécifique. Cela rend la logique lisible au lieu de se noyer dans des codes numériques.

Tableau complet des codes de touches

Voici le tableau actuel pour toutes les touches standard. Les valeurs event.key et event.code sont données telles que les navigateurs modernes (Chrome, Firefox, Edge, Safari) les renvoient.

Touche

event.which

event.key

event.code

Note

Retour arrière

8

Backspace

Backspace

Tabulation

9

Tab

Tab

Entrée

13

Enter

Enter

Shift (gauche)

16

Shift

ShiftLeft

event.shiftKey = true

Shift (droite)

16

Shift

ShiftRight

event.shiftKey = true

Ctrl (gauche)

17

Control

ControlLeft

event.ctrlKey = true

Ctrl (droite)

17

Control

ControlRight

event.ctrlKey = true

Alt (gauche)

18

Alt

AltLeft

event.altKey = true

Alt (droite)

18

Alt

AltRight

event.altKey = true

Pause / Arrêt défil

19

Pause

Pause

Verr Maj

20

CapsLock

CapsLock

Échap

27

Escape

Escape

Espace

32

Space

event.key - espace simple

Page précédente

33

PageUp

PageUp

Page suivante

34

PageDown

PageDown

Fin

35

End

End

Début

36

Home

Home

Flèche gauche

37

ArrowLeft

ArrowLeft

Flèche haut

38

ArrowUp

ArrowUp

Flèche droite

39

ArrowRight

ArrowRight

Flèche bas

40

ArrowDown

ArrowDown

Impr écran

44

PrintScreen

PrintScreen

Insertion

45

Insert

Insert

Suppression

46

Delete

Delete

Rangée numérique (clavier principal)

Touche

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

Lettres A-Z

Touche

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 renvoie la valeur en minuscule pour les lettres. event.code ne dépend ni de la casse ni de la disposition: KeyA désigne la touche physique A, même si la disposition est russe et que la saisie donne «Ф».

Touches spéciales

Touche

event.which

event.key

event.code

Note

Windows gauche

91

Meta

MetaLeft

event.metaKey = true

Windows droite

92

Meta

MetaRight

event.metaKey = true

Menu contextuel

93

ContextMenu

ContextMenu

Pavé numérique (Numpad)

Touche

event.which

event.key

event.code

Pavé num 0

96

0

Numpad0

Pavé num 1

97

1

Numpad1

Pavé num 2

98

2

Numpad2

Pavé num 3

99

3

Numpad3

Pavé num 4

100

4

Numpad4

Pavé num 5

101

5

Numpad5

Pavé num 6

102

6

Numpad6

Pavé num 7

103

7

Numpad7

Pavé num 8

104

8

Numpad8

Pavé num 9

105

9

Numpad9

Pavé num Multiplier

106

*

NumpadMultiply

Pavé num Addition

107

+

NumpadAdd

Pavé num Soustraction

109

-

NumpadSubtract

Pavé num Décimal

110

.

NumpadDecimal

Pavé num Division

111

/

NumpadDivide

Touches de fonction

Touche

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

Système et multimédia

Touche

event.which

event.key

event.code

Note

Verr Num

144

NumLock

NumLock

Arrêt défil

145

ScrollLock

ScrollLock

Muet

173

AudioVolumeMute

AudioVolumeMute

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

Volume bas

174

AudioVolumeDown

AudioVolumeDown

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

Volume haut

175

AudioVolumeUp

AudioVolumeUp

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

Lecteur média

181

LaunchMediaPlayer

LaunchMediaPlayer

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

Lancer App 1

182

LaunchApplication1

LaunchApplication1

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

Lancer App 2

183

LaunchApplication2

LaunchApplication2

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

Ponctuation et symboles

Touche

event.which

event.key

event.code

Note

Point-virgule (;)

186

;

Semicolon

Sous Firefox event.which = 59

Égal (=)

187

=

Equal

Sous Firefox event.which = 61

Virgule (,)

188

,

Comma

Moins (-)

189

-

Minus

Sous Firefox event.which = 173

Point (.)

190

.

Period

Slash (/)

191

/

Slash

Accent grave () | 192 |

Backquote

Crochet gauche ([)

219

[

BracketLeft

Barre oblique inversée ()

220

\

Backslash

Crochet droit (])

221

]

BracketRight

Apostrophe (')

222

'

Quote

Notes importantes sur le tableau

  • event.which est une propriété dépréciée, utilisez event.key.
  • event.code est identique pour les lettres minuscules (a) et majuscules (A), il s’agit de la touche physique. event.key renvoie le caractère réel en tenant compte de la casse.
  • Sous Firefox, les valeurs de event.which pour les touches Equal, Semicolon et Minus diffèrent de Chrome/Edge/Safari (indiqué dans le tableau). Une raison de plus de ne pas utiliser event.which.
  • Les navigateurs basés sur Chromium et Firefox donnent des valeurs event.key et event.code identiques pour toutes les touches listées.
  • Claviers virtuels: la spécification UI Events exige qu’un clavier virtuel (mobile, à l’écran) reproduisant une disposition standard renvoie un event.code correct. En pratique, les navigateurs mobiles (Chrome Android, Safari iOS) gèrent correctement keydown/keyup pour les touches principales, mais event.code peut être vide pour les dispositions non standard.

Entraîneur interactif

Entraîneur interactif d'événements clavier JavaScript

Pour une vérification rapide de tout code issu de l’article, utilisez l’entraîneur clavier: keyevents.netlify.app. Placez votre curseur dans la zone, appuyez sur des touches et visualisez en temps réel les valeurs de event.key, event.code et event.which, ainsi que l’état des indicateurs de modificateurs. Le code source est disponible sur GitHub.

Vidéo: les événements clavier en pratique

Un décryptage pratique et concis de keydown et keyup, la gestion des modificateurs et des raccourcis avec des exemples en direct:

⁉️🤔 Foire aux questions

Quelle est la différence entre event.key et event.code?

event.key renvoie la valeur du caractère en tenant compte de la disposition et de la casse: pour la touche A, c’est "a" (ou "A" avec Shift), pour une disposition russe, "ф". event.code renvoie le code de la touche physique, identique pour toutes les dispositions: "KeyA". Pour les raccourcis, event.code est plus fiable, il ne dépend pas de la langue de saisie. Pour la saisie de texte, utilisez event.key.

Pourquoi keypress n’est-il plus utilisé?

La spécification W3C a marqué keypress comme déprécié: il ne se déclenche que pour les touches de caractère et ne capture pas les modificateurs. Vous ne pouvez pas gérer Ctrl+C, Shift+Tab et d’autres combinaisons via keypress. keydown couvre toutes les touches et est pris en charge de manière identique par tous les navigateurs modernes.

Peut-on complètement abandonner event.which et event.keyCode?

Oui, en 2026, vous le pouvez. event.key est pris en charge dans Chrome 51+, Firefox 29+, Safari 10.1+, Edge 79+. Si votre projet ne cible pas IE11 ou Firefox 28, utilisez uniquement event.key et event.code.

Comment gérer un appui long sur une touche?

Combinez keydown et keyup. Au keydown, lancez un timer ou requestAnimationFrame, au keyup, réinitialisez-le. Pour les contrôles de jeu, c’est le schéma standard: touche maintenue, le personnage se déplace; relâchée, il s’arrête.

Les événements clavier fonctionnent-ils sur les appareils mobiles?

keydown et keyup fonctionnent dans les navigateurs mobiles lorsqu’un clavier Bluetooth externe est utilisé. Le clavier à l’écran génère des événements input, et non keydown/keyup pour toutes les touches. Pour les champs de texte sur mobile, il est donc préférable d’utiliser l’événement input.

Comment distinguer la touche Shift gauche de la droite?

Via event.code: "ShiftLeft" ou "ShiftRight". event.key renvoie "Shift" pour les deux. Même chose pour Control, Alt et Meta.

Ce qu’il faut utiliser dans votre projet

Si vous écrivez du nouveau code, prenez keydown comme événement principal et, pour l’identification de la touche, event.key (symbole) et event.code (touche physique). Cette combinaison couvre tous les scénarios: raccourcis clavier, navigation, contrôles de jeu, validation de formulaire.

Si vous maintenez un produit avec du code legacy basé sur event.which ou event.keyCode, planifiez un refactoring. Le volume de travail est faible: un remplacement dans les gestionnaires, mais le bénéfice est un code propre et prévisible, sans la jungle des différences entre navigateurs.

Gardez le tableau ci-dessus en favori. La prochaine fois que vous aurez besoin du code pour une touche spécifique, ouvrez-le et copiez la valeur event.code nécessaire, sans avoir à vous souvenir des codes numériques de l’ère IE6.