Comment puis-je vérifier si une touche est pressée pendant l'événement click avec jQuery?

j'aimerais attraper un événement de clic avec jQuery et être capable de dire si une touche a été pressée en même temps pour que je puisse bifurquer dans la fonction de rappel basée sur l'événement keypress.

par exemple:

$("button").click(function() {
    if([KEYPRESSED WHILE CLICKED]) {
        // Do something...
    } else {
        // Do something different...
    }
});

est-ce possible ou comment le faire si c'est possible?

91
demandé sur Peter Mortensen 2010-03-15 10:25:46

3 réponses

vous pouvez facilement détecter les touches shift, alt et control à partir des propriétés de l'événement;

$("button").click(function(evt) {
  if (evt.ctrlKey)
    alert('Ctrl down');
  if (evt.altKey)
    alert('Alt down');
  // ...
});

Voir quirksmode pour plus de propriétés. Si vous voulez détecter d'autres clés, voir réponse de cletus .

160
répondu kkyy 2017-05-23 11:54:30

vous devez suivre séparément l'état de la clé en utilisant keydown() et keyup() :

var ctrlPressed = false;
$(window).keydown(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = true;
  }
}).keyup(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = false;
  }
});

voir la liste des codes clés . Maintenant, vous pouvez vérifier que:

$("button").click(function() {
  if (ctrlPressed) {
    // do something
  } else {
    // do something else
  }
});
43
répondu cletus 2010-03-15 07:32:09

j'ai été capable de l'utiliser avec JavaScript seul

 <a  href="" onclick="return Show(event)"></a>

  function Show(event) {
            if (event.ctrlKey) { 
                 alert('Ctrl down');
            }
     }
4
répondu Arun Prasad E S 2017-02-17 03:56:01