Je veux obtenir le texte typé du clavier, pas le code de clé. Par exemple, j'appuie Shift kbd> + f kbd>, je reçois le "F", au lieu d'écouter deux codes de clé. Un autre exemple, je clique ici f3 kbd>, je ne sais rien. Comment puis-je savoir que dans JS? P>
4 Réponses :
J'utilise jQuery pour faire quelque chose comme ceci: éditer: puisque vous n'êtes pas contraignant à la zone de texte Utilisation: p> $(window).on('keypress', function(e) {
var code = (e.keyCode ? e.keyCode : e.which);
if(code == 13) {
//Enter keycode
//Do something
}
});
Mais l'utilisateur ne tape pas sur une zone de texte.
Vous pouvez écouter le Une bonne démo est à Références supplémentaires: et w3schools - javascript fromagrarcode () méthode . P> OnKeyPress code> événement. Cependant, au lieu d'examiner simplement l'une des
event.keycode code> (c.-à-d.) Ou
événement.Quelle code> (Mozilla) Propriété qui vous donne le code de clé, vous devez
string.fromcharcode () code>. p>
displaykeyCode (EVT) code>. P>
Mais il ne connaît pas le moment où l'utilisateur utilise une autre méthode de frappe, par exemple, chinoise.
Donc .. Pour être clair: vous n'utilisez pas une zone de texte (ou une zone de texte), vous souhaitez que vous puissiez pouvoir traiter le caractère résultant que l'utilisateur a été saisi sur votre page Web, et il peut s'agir d'un caractère. résultant d'un éditeur de méthode d'entrée (IME) b> .. stimulant.
N'utilisez pas l'événement code> keydown code> pour récupérer des informations de caractère. Il n'est tout simplement pas possible de le faire de manière fiable. Utilisez KeyPress code> à la place.
@Tattat, je ne pense pas que IME fonctionnera avec des événements KeyPress. Quelques preuves: bugs.doooolkit.org/ticket/3156 .. Reportez-vous à la partie Historique des modifications : "Les personnages entrées par un IME déclenchent l'événement de la compositionend. La raison pour laquelle il n'a pas de sens d'utiliser l'événement OnKeyPress (en plus de ce navigateur ne fonctionne pas de cette façon) est que IME vous permet de saisir une série de caractères ( Typiquement deux caractères), l'événement OnKeyPress n'a donc aucun moyen de représenter que deux caractères étaient entrés. OnKeyPress est pour un seul caractère uniquement. " I>
@Tattat donc ... peut-être regarder l'événement de la composition? Je n'ai aucune orientation à offrir à ce sujet, cependant. Mais, bonne chance.
Ceci est trop compliqué pour répondre rapidement. C'est ce que j'utilise comme référence définitive pour la manipulation du clavier. http://unixpapa.com/js/key.html P>
Belle ressource - je le signet. Dans ce contexte particulier, toutefois, une mention de la manière dont les choses fonctionnent (ou non) avec les éditeurs de méthodes d'entrée (IME) seraient utiles.
J'espère que je n'ai pas fait avoir l'air d'avoir écrit cet article.
Eh bien, l'article a le nom de l'auteur (Jan Wolter) sur celui-ci, il est donc évident de ce point de vue, ce n'est pas votre article, mais dans votre réponse, il est indiqué "C'est mon b> définitif Référence ... " I> .. qui peut être interprété de cette façon ;-)
Pour ce faire, utilisez l'événement KeyPress CODE> comme suit. Aucun autre événement clé très largement pris en charge ne fera:
document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
if (charCode) {
alert("Character typed: " + String.fromCharCode(charCode));
}
};
Cela fonctionnera-t-il lorsque l'utilisateur utilise un éditeur de méthode d'entrée (IME)?
@Chris: Je ne sais pas. Comment l'IME que vous avez à l'esprit interagit-il avec un contrôle de formulaire sur une page Web?
Je mentionne simplement une autre exigence que l'OP est tombé dans un commentaire (voir ma réponse).
Tapez-vous dans une boîte de texte?
non. L'utilisateur ne tape pas sur une zone de texte.
REMARQUE: B> L'OP est intéressé par un mécanisme qui fonctionnerait avec les éditeurs de méthodes d'entrée (EME) (par exemple chinois). Devrait peut-être être une exigence mentionnée dans la question elle-même.