478 votes

onKeyPress vs. onKeyUp et onKeyDown

Quelle est la différence entre ces trois événements ? En cherchant sur Google, j'ai trouvé que :

  • El onKeyDown est déclenché lorsque l'utilisateur appuie sur une touche.
  • El onKeyUp est déclenché lorsque l'utilisateur relâche une touche.
  • El onKeyPress est déclenché lorsque l'utilisateur appuie sur une touche et la relâche. ( onKeyDown suivi par onKeyUp ).

Je comprends les deux premiers, mais n'est-ce pas onKeyPress la même chose que onKeyUp ? Est-il possible de libérer une clé ( onKeyUp ) sans l'appuyer ( onKeyDown ) ?

C'est un peu confus, quelqu'un peut-il m'éclairer ?

4 votes

J'ai constaté que si je maintiens la touche TAB enfoncée, tous les champs sont parcourus en continu et le déclenchement ne s'effectue qu'au moment de la fermeture.

38 votes

L'événement keypress représente un caractère tapé qui peut être utilisé pour l'entrée, comme 'a', 'D', '£', '©', et ainsi de suite. D'autre part, les événements keydown et keyup représentent N'IMPORTE QUELLE touche tapée, ce qui inclut des choses comme le retour arrière, la tabulation, le haut, le bas, le début, la fin, et ainsi de suite.

3 votes

"(ou est-il possible de relâcher une touche(KeyUp) sans la presser(KeyDown) ?)" - Oui. Par exemple, la touche tabulation : l'événement keyup peut ne pas être capturé par le même élément que le keydown.

314voto

Robusto Points 17430

NOTE KeyPress est maintenant déprécié . Utilisez KeyDown à la place.

KeyPress , KeyUp et KeyDown sont analogues à, respectivement : Click , MouseUp, et MouseDown .

  1. Down se produit d'abord
  2. Press se produit en second lieu (lorsque le texte est saisi)
  3. Up se produit en dernier (lorsque la saisie du texte est terminée).

L'exception est webkit qui contient un événement supplémentaire :

keydown
keypress
textInput     
keyup

Vous trouverez ci-dessous un extrait que vous pouvez utiliser pour voir par vous-même quand les événements sont déclenchés :

window.addEventListener("keyup", log);
window.addEventListener("keypress", log);
window.addEventListener("keydown", log);

function log(event){
  console.log( event.type );
}

1 votes

Alors, est-ce que KeyPress est juste un événement supplémentaire entre KeyDown et TextInput ? Comment est-il (KeyPress) généralement utilisé par les développeurs ?

105 votes

+1 meilleure réponse - La touche *Down arrive en premier, la touche *Press arrive en second (lorsque le texte est saisi) et la touche *Up arrive en dernier (lorsque la saisie du texte est terminée).

5 votes

-1 parce qu'une petite expérimentation dans le snippet contredit votre analogie avec l'événement "clic". L'événement "click" se déclenche en même temps que "mouseup" (lorsque vous relâchez le bouton de la souris), mais l'événement "keypress" se déclenche en même temps que "keydown" (lorsque la touche est enfoncée pour la première fois).

241voto

dcp Points 26928

Consultez ici les archives lien utilisé à l'origine dans cette réponse.

De ce lien :

En théorie, le onKeyDown et onKeyUp représentent des touches enfoncées ou relâchées, tandis que les événements de type onKeyPress représente un caractère en train d'être tapé. L'implémentation de la théorie n'est pas la même dans tous les navigateurs.

25 votes

Mise en place d'un jsfiddle basé sur le post de @Falk pour démontrer les idiosynchracies (en utilisant jquery) : jsfiddle.net/zG9MF/2

1 votes

Je ne peux pas voir la page liée, mais le point concernant "la saisie d'un caractère" est important si vous envisagez d'utiliser ce système pour une quelconque validation. L'événement de pression sur la touche ne se déclenche pas lorsque l'utilisateur supprime un caractère, donc votre validation ne se fera pas.

0 votes

@Tony Merryfield - le lien fonctionne bien pour moi, je viens de le vérifier à nouveau.

20voto

arunjitsingh Points 1315

onkeydown est déclenché lorsque la touche est enfoncée (comme dans les raccourcis ; par exemple, dans la fonction Ctrl+A , Ctrl est maintenue "en bas".

onkeyup est déclenché lorsque la touche est relâchée (y compris les touches de modification/etc)

onkeypress est tiré comme une combinaison de onkeydown et onkeyup ou selon la répétition du clavier (lorsque onkeyup n'est pas renvoyé). (ce comportement répété est quelque chose que je n'ai pas testé. Si vous le faites, ajoutez un commentaire).

textInput (webkit uniquement) est déclenché lorsqu'un texte est saisi (par exemple, Shift+A saisit la majuscule "A", mais Ctrl+A sélectionnait du texte et n'en saisissait aucun. Dans ce cas, tous les autres événements sont déclenchés)

1 votes

Je viens de confirmer qu'en effet, "onkeypress" est appelé à plusieurs reprises lorsque la touche est maintenue enfoncée, et que "keyboard repeat" se produit. Cependant, ceci est également vrai pour "onkeydown" ! (ce qui est inattendu, étant donné son nom)

10voto

Falk Points 21

Il semble que onkeypress et onkeydown fassent la même chose (avec la petite différence des touches de raccourci déjà mentionnées ci-dessus).

Vous pouvez essayer ceci :

<textarea type="text" onkeypress="this.value=this.value + 'onkeypress '"></textarea>
<textarea type="text" onkeydown="this.value=this.value + 'onkeydown '" ></textarea>
<textarea type="text" onkeyup="this.value=this.value + 'onkeyup '" ></textarea>

Et vous verrez que les événements onkeypress et onkeydown sont tous deux déclenchés pendant que la touche est enfoncée et non pas lorsque la touche est enfoncée.

La différence est que l'événement est déclenché non pas une fois mais plusieurs fois (tant que vous maintenez la touche enfoncée). Soyez-en conscient et traitez-les en conséquence.

1 votes

Ctrl, Shift, CapsLock, Backspace et autres Les touches qui ne tapent pas quelque chose ne provoquent pas de keypress mais ils déclenchent toujours un événement keydown .

4voto

nu everest Points 585

J'ai constaté que si je maintiens la touche TAB enfoncée, tous les champs sont parcourus en continu et le déclenchement ne s'effectue qu'au moment de la fermeture.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X