Comment décoder le caractère pressé à partir du jQuery keydown()'s gestionnaire d'événements
J'ai besoin de comprendre à quel personnage a été saisie dans un champ de texte à partir de dans le gestionnaire appelé par jQuery keydown
fonction. key.which
me donne seulement le mot de code, mais j'ai besoin de comprendre le caractère ASCII key
représente. Comment puis-je faire cela?
Vous devez vous connecter pour publier un commentaire.
Pour l'entrée de caractères, il est suggéré que vous utilisez
keypress()
, qui rendra compte de la réelle le code ASCII pour le caractère pressé. Il prend automatiquement soin de lettre cas, et ignore les caractères des presses. Dans les deux cas, vous pouvez utiliser fromCharCode() pour convertir une chaîne de caractères de la représentation. E. g.N'oubliez pas que pour
keydown()
etkeyup()
, vous devez garder une trace de l'affaire à l'aide de lae.shiftKey
état.String
n'est pas une var... :((La
keyPress
événement est ce que vous avez besoin pour obtenir le caractère qui a été entré. (Voir ci-dessous solution de contournement pour l'événement keydown).keydown
etkeyup
fournir un code indiquant quelle touche est enfoncée, tout enkeypress
indique que le caractère qui a été entré.À l'aide de jQuery
e.which
vous pouvez obtenir le code de la clé et à l'aide de String.fromCharCode vous pouvez obtenir le caractère spécifique qui a été enfoncé (y compris shiftKey).DÉMO: http://jsfiddle.net/9TyzP/3
Code:
Solution de contournement pour
keydown
Cependant, vous pouvez écrire une solution simple pour obtenir le pressé de caractères de travail sur
keydown
.. La solution de contournement consiste à créer un objet avec la clé comme le charCode sans changement de pression de touche et la valeur avec la touche shift.Remarque: Comme @Sajjan Sarkar a souligné il y a quelques différences dans
e.which
keycode valeur renvoyée par navigateur différent. en savoir plusMis à jour le code de DÉMONSTRATION afin de normaliser la croix-navigateur de code de touche de la valeur. Testé et vérifié dans IE 8, FF et Chrome.
Code complet ci-dessous et mise à jour de la DÉMO: http://jsfiddle.net/S2dyB/17/
Plus sur les événements de clavier --
Le keydown, keypress et keyup événements se déclenche lorsque l'utilisateur appuie sur une touche.
keydown se Déclenche lorsque l'utilisateur appuie sur une touche. Elle se répète tant que l'utilisateur appuie sur la touche.
keypress se Déclenche lorsqu'un caractère est inséré, par exemple, une saisie de texte. Elle se répète tant que l'utilisateur appuie sur la touche.
keyup se Déclenche lorsque l'utilisateur relâche une touche, après l'action par défaut de cette clé a été effectuée.
Lorsqu'une clé est d'abord déprimé, la
keydown
événement est envoyé. Si la clé n'est pas une touche de modification, lekeypress
événement est envoyé. Lorsque l'utilisateur relâche la touche, lekeyup
événement est envoyé.Lorsqu'une touche est enfoncée et maintenue enfoncée, elle commence à s'auto-répétition. Il en résulte une séquence d'événements semblables aux suivants d'être envoyés:
DÉMO: http://jsfiddle.net/9TyzP/1/
keyup, keydown vs keypress
Le keydown et keyup événements représentent des clés enfoncé ou relâché, tandis que l'événement keypress représente un caractère tapé.
DÉMO: http://jsfiddle.net/9TyzP/
Références:
https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent
http://www.quirksmode.org/dom/events/keys.html
http://unixpapa.com/js/key.html
keyCode
(e.qui) surkeydown/keyup/keypress
. Si vous voulez le caractère ASCII, alors vous pouvez utiliserString.fromCharCode
fonction. Vous n'obtenez pas le caractèrekeyup/keypress
.e.shiftKey
surkeydown
et la valeur est retournée comme sansshift
. Qui était à l'origine le problème dans cette abondance question pour commencer. J'ai également mentionné clairement dans ma solution alternative avec une démo jsfiddle.net/S2dyB/4º:
?Que je fais. Il va simplement ignorer la pression de touche si la valeur n'est pas un nombre.
Semble fonctionner sans problème...
Selvakumar Arumugam réponse fonctionne comme un charme pour moi...jusqu'à ce que j'essai de pavé numérique. Si une mise à jour mineure ici:
http://jsfiddle.net/S2dyB/78/
J'ai créé et utilisez la classe javascript pour la conversion de gr en caractères. Il est capable d'être utilisé pour d'autres langues. Il utilise JQuery pour la modification de la valeur pressée par l'utilisateur.
Exemple,