2010-10-24 37 views
13

Vérifiez ma jsFiddle demo, si e.which == 1 puis lorsque vous faites un clic gauche h2 il sera e.which == 2 ou e.which == 3 alors il ne fonctionnera pas. 2 est le bouton central de la souris et 3 est le bouton droit de la souris. J'ai aussi trouvé ceci:Jquery: détecter si le bouton central de la souris ou à droite est cliqué, le cas échéant, faites ceci:

JQuery fournit un attribut e.which, renvoyant respectivement 1, 2, 3 pour un clic gauche, un clic droit et un clic droit. Donc vous pouvez aussi utiliser if (e.which == 3) {alert ("clic droit"); }

Ce code ne fonctionne pas:

Code:

$("h2").live('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

Répondre

23

Vous souhaiterez peut-être piéger l'événement mousedown et vous devrez également empêcher l'événement oncontextmenu d'arrêter le menu contextuel pendant l'événement de clic droit.

$("h2").live('mousedown', function(e) { 
    if((e.which == 1)) { 
    alert("left button"); 
    }if((e.which == 3)) { 
    alert("right button"); 
    }else if((e.which == 2)) { 
     alert("middle button"); 
    } 
    e.preventDefault(); 
}).live('contextmenu', function(e){ 
    e.preventDefault(); 
}); 
+0

Ouais, j'ai trouvé que 'contextmenu' était une façon agréable de passer outre le menu intégré . Mais peut-être que votre première fonction pourrait l'inclure au lieu de le virer à la fin. Je ne sais pas pourquoi il utilise live, mais j'utiliser '.bind ('mousedown contextmenu', fonction ...' – Mottie

+0

lol! @fudgey J'ai aussi tot pourquoi il utilisait live quand il peut utiliser window.ready et juste attachez-le directement, mais il doit avoir ses raisons, mais à propos du virement de bord, il fera en sorte que tout code qu'il met dans l'instruction if s'exécute deux fois – burntblark

+0

en fait c'est juste un extrait de code que j'ai copié, donc je n'ai aucune idée J'utilise .live ... haha, ok, donc je vais travailler avec ce que j'ai ci-dessus, mais avez-vous pensé qu'il y avait quelque chose de mieux? et je vais utiliser '.bind ('mousedown contextmenu', function' –

2

J'ai remarqué quelques bizarreries dans le passé avec l'aide de l'événement de clic pour tout sauf un clic gauche régulier. Je ne me souviens pas des détails, mais si vous changez "clic" pour "mousedown" ou "mouseup" vous devriez avoir de meilleurs résultats.

+0

Vous avez raison, cliquez sur ne fonctionne pas, mais mousedown fonctionne pour détecter les boutons milieu et de droite – gideon

1

maintenant button infraction a été commise au-delà de toute reconnaissance. Selon W3C ses valeurs doivent être:

  • bouton gauche - 0
  • bouton du milieu - 1
  • bouton droit - 2

Selon Microsoft ses valeurs doivent être:

  • Bouton de gauche - 1
  • Bouton du milieu - 4
  • bouton droit - 2

Sans doute le modèle Microsoft est mieux que le W3C de. 0 devrait signifier "aucun bouton enfoncé", tout le reste est illogique.

De http://www.quirksmode.org/js/events_properties.html

+0

[jQuery normalise les propriétés suivantes pour la cohérence entre les navigateurs: ... 'which'] (http://api.jquery.com/category/events/event-object/). Mieux vaut utiliser 'which' au lieu de' button'. – Pang