Jeudi 19 août 2004
Event Caractère which keyCode charCode altKey ctrlKey shiftKey metaKey
keydown X X X X X X X X
keypress X X X X X X X X
keyup X X X X X X X X
0

Que disent les normes officielles ?

La recommandation HTML 4.01 définit les trois attributs d’évènement (onkeydown, onkeyup et onkeypress) dans le paragraphe sur les événements intrinsèques. Voici leur définition telle que donnée par le W3C :

onkeydown
L’événement onkeydown se produit quand une touche est gardée appuyée au-dessus d’un élément. Cet attribut peut s’utiliser avec la plupart des éléments.
onkeyup
L’événement onkeyup se produit quand une touche est relâchée au-dessus d’un élément. Cet attribut peut s’utiliser avec la plupart des éléments.
onkeypress
L’événement onkeypress se produit quand une touche est pressée puis relâchée au-dessus d’un élément. Cet attribut peut s’utiliser avec la plupart des éléments.

Le module Évènements du DOM niveau 2 (DOM2 Events) ne traite pas des évènements clavier comme l’indique ce passage :

La spécification des événements du DOM niveau 2 ne propose pas de module d’événements de touche. Un module d’événements conçu pour l’utilisation des dispositifs d'entrée par le clavier sera inclus dans une version ultérieure de la spécification DOM.

Le module Évènements du DOM niveau 3 (DOM3 Events) (à l’état de document de travail) contient un chapitre définissant l’interface KeyboardEvent. On peut noter que, dans cette version de la spec. du moins, l’évènement keypress est absent.

Support actuel des navigateurs

Médiocre… J’en viens même à me demander si ces évènements ont un intérêt quelconque dans l’état actuel des choses. Mais en l’absence de définition claire sur ces évènements, il eût été étonnant qu’il en soit autrement… Une lueur d’espoir dans ce monde barbare cependant, les quatre propriétés concernant les touches "spéciales", altKey, ctrlKey, shiftKey et metaKey, sont définies dans l’interface MouseEvents dans le module Évènements du DOM niveau 2 (DOM2 Events).

Les évènements keydown et keyup conviennent si l’on ne s’interesse qu’aux vingt-six caractères de l’alphabet latin et que l’absence de distinction entre majuscules et minuscules n’est pas génante. Dans le cas contraire, oubliez les !

L’évènement keypress est plus interessant. La distinction est faite entre majuscules et minuscules et la plupart des touches sont correctement capturées. En revanche, dans l’ensemble des navigateurs dans lesquels j’ai fait les tests, cet évènement est déclenché dés qu’on appuie sur une touche et, de plus, se répète tant qu’on garde la touche pressée, ce qui ne correspond pas à la définition faite dans la recommandation HTML 4.01 (HTML 4.01).

Enfin, pour obtenir le code de la touche activée, c’est au petit bonheur la chance. which, keyCode ou encore charCode (selon le navigateur et, parfois, l’évènement key* utilisé), faites vos jeux…

Résultats des tests

Les résultats des tests selon les navigateurs. Bientôt…

Références