10
votes

Comment auditeur le texte du clavier en JavaScript?

Je veux obtenir le texte typé du clavier, pas le code de clé. Par exemple, j'appuie Shift + f , je reçois le "F", au lieu d'écouter deux codes de clé. Un autre exemple, je clique ici f3 , je ne sais rien. Comment puis-je savoir que dans JS?


3 commentaires

Tapez-vous dans une boîte de texte?


non. L'utilisateur ne tape pas sur une zone de texte.


REMARQUE: 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.


4 Réponses :


2
votes

J'utilise jQuery pour faire quelque chose comme ceci: xxx pré>

é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
  }

});


1 commentaires

Mais l'utilisateur ne tape pas sur une zone de texte.



0
votes

Vous pouvez écouter le OnKeyPress événement. Cependant, au lieu d'examiner simplement l'une des event.keycode (c.-à-d.) Ou événement.Quelle (Mozilla) Propriété qui vous donne le code de clé, vous devez Traduire Le code de clé en utilisant string.fromcharcode () .

Une bonne démo est à codes de caractère JavaScript (codes de clé) . Affichez la source et recherchez la fonction displaykeyCode (EVT) .

Références supplémentaires: et w3schools - javascript fromagrarcode () méthode .


5 commentaires

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) .. stimulant.


N'utilisez pas l'événement keydown 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 à 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. "


@Tattat donc ... peut-être regarder l'événement de la composition? Je n'ai aucune orientation à offrir à ce sujet, cependant. Mais, bonne chance.



0
votes

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


3 commentaires

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 définitif Référence ... " .. qui peut être interprété de cette façon ;-)



21
votes

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));
    }
};


3 commentaires

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).