2013-06-16 3 views
7

Ich möchte ein jQuery-UI-Dialogfeld als Popup anzeigen, wenn der Benutzer auf die linke Maustaste oder die mittlere Maustaste klickt. Es funktioniert für Linksklick (Ich bekomme die Alarmbox und danach das Popup), funktioniert aber nicht für die Mitte (weder Alarmbox noch Popup). Was vermisse ich?Erkennen von mittlerem Mausklick-Ereignis jQuery

$('a.external').live('click', function(e){ 
    if(e.which <= 2) { 
    e.preventDefault(); 
    alert ("inside if"); 
    } 
    popUp.start(this); 
}); 
+0

Versuchen auf Chrome, FF und IE10. –

Antwort

15

Verwenden mousedown oder mouseup statt click. Und (es sei denn Sie eine sehr alte Version von jQuery verwenden) verwenden .on() statt .live():

$(document).on("mousedown", "a.external", function(e) { 
    if(e.which <= 2) { 
     e.preventDefault(); 
     alert ("inside if"); 
    } 
    popUp.start(this); 
}); 

... wo idealerweise Sie ein übergeordnetes Element viel näher an der Verbindung als document verwenden würde.

Demo: http://jsfiddle.net/7S2SQ/

+0

Gut, danke. –

+0

Warum übergeben Sie "a.external" als Daten an den Event-Handler? Hat er das nicht als Selektor benutzt? – Nate

+3

@Nate - Ich übergebe nicht "a.external" 'als Daten, das ist der Selektor für ein delegiertes Ereignis. Sehen Sie sich die ['.on()' Dokumentation] (http://api.jquery.com/on/) an. In diesem Fall wird das mousedown -Ereignis an das Dokument gebunden, aber wenn es auftritt, überprüft jQuery automatisch, ob das Quellelement mit dem Selektor in diesem zweiten Argument übereinstimmt (und ruft nur dann Ihre Funktion auf, wenn es übereinstimmt). Im Idealfall würden Sie nicht an das Dokument binden: Wie in meiner Antwort erwähnt, würden Sie idealerweise ein Elternelement verwenden, das dem Link näher ist. – nnnnnn

3

Um dies vollständig in Firefox (40.0.3) arbeiten, ich .on('mouseup', fn) implementieren musste, wie folgt:

$(selector).on('mouseup', function (e) { 

    switch (e.which) 
    { 
     // Left Click. 
     case 1: 
      // By way of example, I've added Ctrl+Click Modifiers. 
      if (e.ctrlKey) { 
       // Ctrl+LeftClick behaviour. 
      } else { 
       // Standard LeftClick behaviour. 
      } 
      break; 

     // Middle click. 
     case 2: 
      // Interrupts "Firefox Open New Tab" behaviour. 
      break; 

     // Default behaviour for right click. 
     case 3: 
      return; 
    } 

    // Pass control back to default handler. 
    return true; 
}); 
+0

@nnnnnn, danke für den Schnitt. Ich weiß nicht, wie ich das vermisst habe. : -S – Apache

+0

hat mich ewig gebraucht, um deinen Tippfehler zu finden ... – Brandito