49 votes

JQuery .keypress () peut-il détecter plusieurs clés en même temps?

Existe-t-il un moyen pour jQuery de détecter que plusieurs touches ont été enfoncées simultanément?

Existe-t-il une alternative permettant de détecter deux touches en même temps?

78voto

Box9 Points 41987

Pour détecter plusieurs clés maintenues enfoncées, utilisez les événements keydown et keyup .

 var keys = {};

$(document).keydown(function (e) {
    keys[e.which] = true;
});

$(document).keyup(function (e) {
    delete keys[e.which];
});
 

J'ai mis en place une démo ici: http://jsfiddle.net/gFcuU/ . C'est assez amusant, même si j'ai remarqué que mon clavier ne peut détecter que 6 touches au maximum.

60voto

jAndy Points 93076

Il dépend. "Normales" de touches, ce qui signifie Non- Shift, Ctrl, ALT, (CMD), la réponse est non, le gestionnaire d'événements va attraper/incendie dans une file d'attente, l'un après l'autre.

Pour les touches de modification je l'ai mentionné ci-dessus, il est une propriété de l'objet d'événement.

Exemple:

$(document).bind('keypress', function(event) {
    if( event.which === 65 && event.shiftKey ) {
        alert('you pressed SHIFT+A');
    }
});

Démo: http://www.jsfiddle.net/bM6uY/4/

D'autres propertys sont:

  • event.ctrlKey
  • event.altKey
  • event.metaKey

2voto

Jacob Relkin Points 90729

Nan. keypress se déclenche pour chaque touche individuelle enfoncée - à l'exception des touches de modification telles que CTRL, ALT et SHIFT, vous pouvez les combiner avec d'autres touches, à condition qu'il ne s'agisse que d'une seule autre touche.

0voto

Maciej Paprocki Points 146

Vous pouvez utiliser mon plugin pour jQuery pour détecter les raccourcis.

Il cache essentiellement les événements et indique les touches sur lesquelles vous appuyez en ce moment. Si toutes les touches sont enfoncées, la fonction est activée.

https://github.com/maciekpaprocki/bindShortcut

Vous avez une petite explication sur la façon de l’utiliser dans un fichier readme. J'espère que cela t'aides. Commentaires plus qu'appréciés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X