2010-03-15 16 views
86

J'aimerais attraper un événement click avec jQuery et être capable de dire si une touche a été enfoncée en même temps pour pouvoir utiliser la fonction de rappel en fonction de l'événement de pression de touche.Comment puis-je vérifier si une touche est pressée pendant l'événement click avec jQuery?

Par exemple:

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

Est-ce possible à tout ou comment peut-il faire s'il est possible?

Répondre

42

Vous devez suivre séparément l'état clé à l'aide 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 list of key codes. Vous pouvez maintenant vérifier que:

$("button").click(function() { 
    if (ctrlPressed) { 
    // do something 
    } else { 
    // do something else 
    } 
}); 
+5

Un inconvénient de cette méthode (pas que je connais mieux) est si vous détectez la touche ALT, et l'utilisateur ALT-onglets pour une autre fenêtre, l'événement de clé n'est pas détecté par le navigateur car il s'est produit sur une autre application. À partir de ce moment, jquery pense que la clé est en panne, jusqu'à ce qu'ils entrent dans votre application jquery. Cela importe seulement avec la touche ALT, autant que je peux imaginer. – Ben

+1

Pour Mac OS X qui serait Cmd-Tab, mais je pense que le principal est toujours – murftown

+0

Ou Ctrl + Tab pour modifier l'onglet du navigateur – Seeven

152

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 souhaitez détecter d'autres clés, voir cletus's answer.

+3

Je ne vois pas cette propriété sur l'objet événement jQuery: http: //api.jquery. com/category/events/event-object/ – cletus

+1

Eh bien, comme le dit la page, "La plupart des propriétés de l'événement d'origine sont copiées et normalisées vers le nouvel objet d'événement." ctrlKey, altKey etc font partie de la norme ecmascript (voir le premier lien sur la page jquery api précitée), donc (au moins dans les navigateurs décents) l'objet événement a généralement aussi ces propriétés ensemble. – kkyy

+3

Le mode Quirks indique seulement que ceux-ci sont définis * dans * un événement clé .. aucune mention d'un événement souris. –

4

j'ai pu l'utiliser avec JavaScript seul

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

    function Show(event) { 
      if (event.ctrlKey) { 
       alert('Ctrl down'); 
      } 
    } 
Questions connexes