Voici ce que j'ai maintenant:
$("input").bind("keydown",function(e){
var value = this.value + String.fromCharCode(e.keyCode);
}
Si le e.keyCode
ne peut pas être un caractère ASCII ( Alt, backspace, del, arrows., Etc) ... Je voudrais maintenant besoin de trim
ces valeurs de value
façon ou d' autre ( de préférence par programmation - pas avec des tables de consultation).
J'utilise jQuery.
Je dois utiliser l' keydown
événement. keyPress
ne pas activer certaines touches que je dois capture ( Esc, del, backspace, etc.).
Je ne peux pas utiliser setTimeout
pour obtenir la valeur de l'entrée. setTimeout(function(){},0)
est trop lent.
javascript
jquery
special-characters
keycode
David Murdoch
la source
la source
keydown
pour capturer les codes de caractères? Vous êtes parti pour un sacré tour: quirksmode.org/js/keys.html (indice: utilisezkeypress
!! )document.onkeydown = function(e){ console.log('Key: ' + e.key); }
Réponses:
Peut-être que je n'ai pas bien compris la question, mais ne pouvez-vous pas utiliser
keyup
si vous souhaitez capturer les deux entrées?la source
Dans mon expérience
String.fromCharCode(e.keyCode)
n'est pas fiable.String.fromCharCode
attend des charcodes unicode comme argument;e.keyCode
renvoie les codes d'accès javascript. Les keycodes Javascript et les charcodes Unicode ne sont pas la même chose! En particulier, les touches du pavé numérique renvoient une touche différentekeycode
des touches numériques ordinaires (car ce sont des touches différentes) tandis que la même chosekeycode
est renvoyée pour les deuxupper
et leslowercase
lettres (vous avez appuyé sur la même touche dans les deux cas), bien qu'elles soient différentescharcodes
.Par exemple, la touche numérique ordinaire 1 génère un événement avec
keycode
49 tandis que la touche du pavé numérique 1 (avec activé Numlock) génèrekeycode
97. Utilisé avec,String.fromCharCode
nous obtenons ce qui suit:String.fromCharCode
attend des charcodes unicode, pas des keycodes javascript. La touche agénère un événement avec unkeycode
de 65, indépendant de la casse du caractère qu'elle générerait (il existe également un modificateur pour savoir si la Shifttouche est enfoncée, etc. dans l'événement). Le caractère aa un unicodecharcode
de 61 tandis que le caractère Aa uncharcode
de 41 (selon, par exemple, http://www.utf8-chartable.de/ ). Cependant, ce sont deshex
valeurs, la conversion en décimal nous donne uncharcode
de 65 pour "A" et 97 pour "a". [1] Ceci est cohérent avec ce que nous tirons deString.fromCharCode
ces valeurs.Ma propre exigence était limitée au traitement des nombres et des lettres ordinaires (accepter ou rejeter selon la position dans la chaîne) et laisser Fpasser les caractères de contrôle ( -keys, Ctrl-quelque chose). Ainsi, je peux vérifier les caractères de contrôle, si ce n'est pas un caractère de contrôle, je vérifie par rapport à une plage et alors seulement j'ai besoin d'obtenir le caractère réel. Étant donné que je ne suis pas inquiet pour la casse (je change toutes les lettres en majuscules de toute façon) et que j'ai déjà limité la gamme de codes clés, je n'ai qu'à m'inquiéter des touches du pavé numérique. Ce qui suit suffit pour cela:
Plus généralement, une fonction pour renvoyer de manière fiable le caractère à partir de a
charcode
serait géniale (peut-être en tant que plugin jQuery), mais je n'ai pas le temps de l'écrire pour l'instant. Désolé.Je mentionnerais également
e.which
(si vous utilisez jQuery) qui normalisee.keyCode
ete.charCode
, afin que vous n'ayez pas à vous soucier du type de touche enfoncée. Le problème de le combiner avecString.fromCharCode
demeure.[1] J'ai été confus pendant un certain temps -. tous les documents disent que
String.fromCharCode
s'attend à un unicodecharcode
, alors qu'en pratique, cela semblait fonctionner pour les charcodes ASCII, mais c'était, je pense, dû à la nécessité de convertir en décimal à partir de l'hexagone, combiné avec le fait que les charcodes ASCII et les charcodes décimaux unicode se chevauchent pour l'ordinaire lettres latines.la source
keyCode
est de savoir sur quelle touche on a appuyé, pas de savoir quel caractère utiliser. Par exemple, "U" sur un clavier Dvorak a le même code clé que "F" sur un clavier QWERTY ou "ㄹ" sur un clavier coréen, etc. Le but n'est pas de le convertir en caractère, il est là pour que vous puissiez mappez facilement les choses à une position de clavier.Noms de clé lisibles indexés par code de clé
Il y a relativement peu de codes clés, j'ai donc simplement répertorié toutes les valeurs correspondantes dans un tableau statique afin que je puisse simplement convertir le nombre
65
enA
utilisationkeyboardMap[65]
Tous les codes de clé ne correspondent pas à un caractère imprimable, donc une autre chaîne identifiable est renvoyée.
Vous devrez peut-être modifier le tableau en fonction de vos besoins et renvoyer simplement des chaînes vides pour tous les caractères que vous ne souhaitez pas traduire. Le tableau suivant me permet de déterminer rapidement et de manière fiable quelle touche a été enfoncée dans n'importe quel environnement. Prendre plaisir!
Essayez l'extrait de code suivant à l'aide de cette approche de recherche de tableau statique ...
Afficher l'extrait de code
Codes clés à noter
Lettres AZ: (65-90)
Chiffres 0-9: (48-57)
Pavé numérique 0-9: (96-105)
Touches fléchées: (37-40)
Touche de tabulation: (9)
Entrer la clé: (13)
Touche de la barre d'espace: (32)
Clé spécifique au système d'exploitation (91) Touche Windows (Windows) ou touche de commande (Mac)
Touche Alt: (18)
Clé de contrôle: (17)
Touche Shift: (16)
Touche de verrouillage des majuscules: (20)
la source
Juste une remarque importante: la réponse acceptée ci-dessus ne fonctionnera pas correctement pour keyCode> = 144, c'est-à-dire point, virgule, tiret, etc. Pour ceux-ci, vous devriez utiliser un algorithme plus général:
Si vous êtes curieux de savoir pourquoi, cela est apparemment nécessaire en raison du comportement de la fonction JS intégrée
String.fromCharCode()
. Pour les valeurs dekeyCode <= 96
il semble mapper en utilisant la fonction:chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Pour les valeurs de
keyCode > 96
il semble mapper en utilisant la fonction:chrCode = keyCode
Si cela semble être un comportement étrange, alors je suis d'accord. Malheureusement, ce serait très loin d'être la chose la plus étrange que j'ai vue dans le noyau JS.
la source
let
dans une réponse à une question de 2009. :-)let
je lui aiJe suppose que c'est pour un jeu ou pour un type d'application à réponse rapide, d'où l'utilisation de KEYDOWN plutôt que KEYPRESS.
Edit : Dang! Je reste corrigé (merci Crescent Fresh et David): JQuery (ou même plutôt les hôtes DOM sous-jacents) n'expose pas le détail du WM_KEYDOWN et des autres événements. Au contraire, ils pré-digèrent ces données et, dans le cas de keyDown même dans JQuery, nous obtenons:
Notez que ces propriétés sont les valeurs UniCode.
Notez que je n'ai pas pu trouver une référence faisant autorité à cela dans la documentation JQuery, mais de nombreux exemples réputés sur le net font référence à ces deux propriétés.
Le code suivant, adapté de certains de mes java (pas javascript), est donc totalement faux ...
Ce qui suit vous donnera les parties "intéressantes" du code clé:
la source
keydown
ou non).Je sais que c'est une vieille question, mais je l'ai rencontrée aujourd'hui à la recherche d'une solution pré-emballée à ce problème, et je n'ai rien trouvé qui réponde vraiment à mes besoins.
Voici une solution (en anglais uniquement) qui prend correctement en charge les majuscules (décalées), les minuscules, la ponctuation, le clavier numérique, etc.
Il permet également une identification simple et directe des touches non imprimables, et une réaction à celles-ci, telles que ESC, flèches, touches de fonction, etc.
https://jsfiddle.net/5hhu896g/1/
Merci à DaveAlger de m'avoir sauvé un peu de frappe - et beaucoup de découvertes! - en fournissant le Named Key Array.
la source
J'ai récemment écrit un module appelé Keysight qui se traduit
keypress
,keydown
et leskeyup
événements en caractères et les touches respectivement.Exemple:
la source
Pour ceux d'entre vous qui sont venus ici à la recherche des valeurs de caractères Unicode réelles pour un code clé, comme je l'ai fait, voici une fonction pour cela. Par exemple, étant donné le code clé unicode de la flèche droite, cela affichera la chaîne visible
\u001B\u005B\u0043
la source
Vous pouvez également utiliser la propriété en lecture seule
key
. Il respecte également les touches spéciales commeshift etc. et est pris en charge par IE9.Lorsqu'un caractère non imprimable ou spécial est pressé, la valeur sera l'une des valeurs clés définies comme
'Shift'
ou'Multiply'
.event.key
'x'
'X'
'F5'
la source
Référez-vous à ce lien Obtenir le code clé à partir de la pression sur la touche et la valeur du caractère pour tout code clé
la source