7
votes

JQuery KeyPress Eventise à plusieurs reprises lorsque la touche est maintenue - mais pas sur toutes les clés

Ceci est probablement un comportement prévu ou au moins, pas une question de JQuery / JS, mais j'aimerais des éclaircissements s'il y a eu un.

Prenez les éléments suivants: P>

$(document).bind('keypress', function(e){
    switch(e.keyCode)
    {
        case 37:
            console.log('left cursor keydown, will fire on hold');
            break;
        case 39:
            console.log('right cursor keydown, will fire on hold');
            break;
        case 80:
            console.log('p will only fire once per press!');
            break;
    }
});


3 commentaires

Toutes les clés répètent. Vous devez ajouter break à la fin de chaque boîtier de commutation, sauf si vous les avez laissées de côté intentionnellement. Soit votre clavier est mal fonctionnant, soit votre code nécessite simplement une pause .


Pas pour moi - "P" se répète bien. Je pense que c'est une fonction du matériel / du micrologiciel de votre clavier.


@Briangraham vient de repérer ça, merci :) Après avoir testé à nouveau sur Jsfiddle, je vois une répétition sur toutes les clés aussi - Cependant, le KeyCodeT attr est 0 sur la plupart des clés de l'événement KeyPress, qui expliquerait une partie du comportement étrange que j'étais voyant


3 Réponses :


5
votes

Le comportement varie entre les navigateurs et les systèmes d'exploitation. La page suivante couvre le sujet des événements clés répétés automatiquement en détail à la section 2.2:

http://unixpapa.com/js/key.html


0 commentaires

0
votes

Aussi - au profit de toutes les personnes qui affichent ce message: essayez la méthode "Clé"

KeyPress sera tiré plusieurs fois ... Clé à jour ne sera pas

http://jquerymobile.com/demos /1.0a2/experiments/APIViewer/docs/keyPress/index.html


1 commentaires

Keydown Répétez réellement (dans le dernier Google Chrome au moins). Essayez ici: $ (document) .on ('Keydown', fonction (ev) {console.log (ev)})



1
votes

Ce problème existe depuis des âges, mais je pense avoir découvert une solution juste maintenant. Cela semble fonctionner correctement xxx


0 commentaires