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 |
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
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
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
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.
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…
Les résultats des tests selon les navigateurs. Bientôt…