Pourquoi l'événement 'keydown' fonctionne comme un événement 'keypress'?

Le prochain exemple de code produit le message «décompte» plusieurs fois alors que je tiens un bouton enfoncé. Les docs affirment que l'événement de dépannage se produit une seule fois pour appuyer sur le bouton. Donc, l'événement de dépannage fonctionne comme l'événement keypress dans l'exemple suivant.

<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title></title> <script type='text/javascript' src='jquery.js'></script> <script type='text/javascript'> function onLoad() { $( '#text' ).on( 'keydown', function() { console.info( 'keydown' ) } ); } </script> </head> <body onload='onLoad()'> <input type='text' id='text'> </body> </html> 

Je l'ai testé sur Windows, Firefox 19.0.2 et Google Chrome 25.0.1364.152. J'ai également créé un violon (le problème peut être reproduit). Les versions de JQuery pour lesquelles le problème est reproduit: 1.8.2, 1.9.1.

Mettre à jour.

Je me suis rendu compte du problème: comment puis-je éviter les événements keydown autorisés dans JavaScript? .

L'événement de keydown se produit lorsque vous appuyez sur la touche, suivie immédiatement de l'événement de la keypress . Ensuite, l'événement de la clé est généré lorsque la clé est relâchée.

Afin de comprendre la différence entre le keydown et la keypress , il est utile de comprendre la différence entre un «personnage» et une «clé». Une "clé" est un bouton physique sur le clavier de l'ordinateur tandis qu'un "caractère" est un symbole tapé en appuyant sur un bouton. En théorie, les événements de keyup et de keyup représentent les touches en cours de pression ou de libération, tandis que l'événement de keypress représente un caractère tapé. La mise en œuvre de la théorie n'est pas la même dans tous les navigateurs.

Référence: cet article

L'événement KeyPress n'est pas généré par des clés non-caractères; Cependant, les touches non-caractères augmentent les événements KeyDown et KeyUp.

Les événements clés se produisent dans l'ordre suivant:

  1. KeyDown
  2. Appuyez sur la touche
  3. KeyUp

Ces événements sont-ils disponibles sur la fenêtre, le document, la forme, les éléments focalisables
Page de test

L'événement de dépannage se produit lorsque vous appuyez sur la touche, suivie immédiatement de l'événement de la pression de touche.

J'ai répondu ici, me suit lentement: la keydown : lorsque vous commencez à taper une touche ou que vous changez quelque chose et que vous obtenez un résultat pour une pression mais que vous obtenez le résultat avant que le dernier ne soit pas le dernier résultat. keyup : vous travaillez lorsque vous arrêtez de taper une clé ou de revenir en arrière (changez quelque chose comme supprimer le caractère) et c'est donner donne le dernier résultat. keypress : vous travaillez lorsque vous commencez à taper la touche, mais ne commencez pas à changer quelque chose et que keydpress vous donne un résultat pour une pression, mais que vous obtenez le résultat avant le dernier, lequel (lastResult – 1)