2009-09-27 3 views
3

L'utilisation de l'événement click with live entraîne un comportement étrange lors de l'utilisation de Firefox *. Avec live dans Firefox, le clic est déclenché lorsque vous cliquez avec le bouton droit de la souris! La même chose ne se produit pas dans Internet Explorer 7 ni dans Google Chrome.L'événement jQuery click se comporte différemment avec la fonction live dans Firefox

Exemple:

  • Without live, allez à la démo et essayez de cliquer droit les paragraphes. Un menu de dialogue doit apparaître .
  • With live, allez à la démo et essayez à droite en cliquant sur "Click me!". Maintenant le menu de dialogue et "Un autre paragraphe" apparaissent.

* testé avec Firefox 3.5.3

Répondre

4

Pour autant que je sache, c'est un problème connu. Vous pouvez facilement contourner le problème en test quel bouton a été cliqué comme suit:

$('a.foo').live("click", function(e) { 
    if (e.button == 0) { // 0 = left, 1 = middle, 2 = right 
     //left button was clicked 
    } else { 
     //other button was clicked (do nothing?) 
     //return false or e.preventDefault() 
    } 
}); 

vous pourriez préférer utiliser un switch en fonction de vos besoins spécifiques, mais en général, vous voudrez probablement juste ne rien faire (ou ou retourner simplement) si un bouton autre que le bouton gauche est cliqué, comme ci-dessus:

$('a.foo').live("click", function(e) { 
     switch(e.button) { 
      case 0 : alert('Left button was clicked');break; 
      default: return false; 
     } 
    }); 
1

Je pense qu'il est un connu « bug », vous pourriez potentiellement interroger l'objet d'événement après la fixation du gestionnaire de clic (qui se joint au document) et voir si son un clic droit, sinon attacher manuellement le gestionnaire de clic après avoir manipulé le DOM.

Après avoir regardé vers le haut, e.button est la propriété que vous souhaitez interroger: (bug)

.live('click', function(e){ 

if (e.button == 2) return false; // exit if right clicking 

// normal action 

}); 
1

Voir my answer here: si cela ne vous dérange pas de changer la source jQuery un peu, en ajoutant une seule ligne dans les liveHandler() œuvres autour du problème tout à fait.

Questions connexes