2010-09-15 6 views
3

jQuery est-il un moyen d'avoir quelque chose comme:SI clic OU keydown

if (button.click() || (keydown == 39)) { 
    //stuff 
} 
+2

Je ne comprends pas ce que vous voulez dire. –

+0

Je voudrais qu'un événement soit déclenché à la fois sur 'keydown' et' mouseclick' –

+0

Je dirais que vous devez lier une fonction à l'événement 'click' et' keydown'. –

Répondre

8
function stuff(e) { alert('Something happened'); } 

$('input[type=button]').click(function(e) { 
    stuff(e); 
}); 

$(document).keydown(function(e) { 
    if (e.keyCode == 39) { stuff(e); } 
});​​​ 

http://www.jsfiddle.net/4WuB5/

+1

Top choses, acceptera quand SO me permet –

+0

Cela fonctionne très bien pour moi, j'ai également voté jusqu'à la réponse ci-dessus. –

7

Vous pouvez bind() à plusieurs événements:

$(button).bind("click keydown", function (evt) { 
    if (evt.type == "keydown" && evt.which == 39) 
     alert("Key 39 pressed"); 
    else if (evt.type == "click") 
     alert("Clicked!"); 
}); 

Exemple: http://jsfiddle.net/Bymug/

Notez que la barre d'espace et les touches d'entrée peuvent également déclencher l'événement click sur un bouton.

+0

+1 - Pour élaborer, il suffit de vérifier la présence de keyCode dans le evt, tester if == 39 puis exécuter votre 'truc' ou retour. – mkoistinen

+0

... puis vérifiez lequel vous avez et manipulez le bit 'keyCode == 39'. –

+0

... et c'est tout! +1 – Reigel

3

Vous pouvez utiliser l'événement live et poignée multple événements:

$('.someClass').live('keydown mouseclick', function(event) { 
    if (event.type == 'mouseclick') { 
     // Do something 
    } else if (event.type == 'keydown' { 
     if (event.keyCode == '39') 
     { 
      // Do something 
     } 
    } 
}); 
+1

Pourquoi le live est-il requis ici plutôt que lié? – mkoistinen

+0

'.live()' fonctionne pour les éléments correspondants existants et futurs. '.bind' n'assigne que des correspondances existantes. Ils sont l'un des mêmes vraiment, mais «.live» je trouve généralement plus utile. Vous pouvez utiliser l'un ou l'autre et obtenir le même résultat. – GenericTypeTea

+0

Je comprends la différence entre vivre, lier (un et délégué), mais j'étais curieux de savoir pourquoi vous avez déclaré que 'Vous devez utiliser le 'live' ...'. Bien sûr cela fonctionne, mais je pense qu'il est négligent d'utiliser 'live' quand' bind' (ou 'one' ou' delegate') est plus approprié. – mkoistinen

3

Non, ce sont des événements distincts, vous devez les brancher séparément. Vous pouvez utiliser une fonction nommée pour appeler à partir de chaque événement:

function x() { 
    ... 
} 

$('.someclass') 
    .click(x) 
    .keydown(function(e){ 
    if (e.keyCode == 39) x(e); 
    });