2013-06-16 8 views
7

Chcę wyświetlić okno dialogowe jQuery-UI jako wyskakujące okienko, gdy użytkownik kliknie lewym przyciskiem myszy lub środkowym. Działa dla kliknięcia lewym przyciskiem (otrzymuję okienko alertu, a następnie wyskakujące okienko), ale nie działa na środku (ani okienko alertu, ani wyskakujące okienko). czego mi brakuje?Wykrywanie zdarzenia kliknięcia środkowym przyciskiem myszy jQuery

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

Wypróbowane na Chrome, FF i IE10. –

Odpowiedz

15

Zastosowanie mousedown lub mouseup zamiast click. I (o ile nie używasz bardzo starą wersję jQuery) używać .on() zamiast .live():

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

... gdzie najlepiej byłoby użyć elementu nadrzędnego znacznie bliżej do łącza niż document.

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

+0

Dobra, dziękuję. –

+0

Dlaczego przekazujesz '" a.external "' jako dane do obsługi zdarzenia? Czy nie używał tego jako selektora? – Nate

+3

@Nate - Nie przekazuję '" a.external "' jako danych, że _jest_ selektorem dla delegowanego zdarzenia. Zajrzyj do dokumentacji '' .on() '(http://api.jquery.com/on/). W tym przypadku zdarzenie mousedown jest powiązane z dokumentem, ale gdy występuje, jQuery automatycznie sprawdza, czy element źródłowy odpowiada selektorowi w tym drugim argumencie (i wywołuje tylko tę funkcję, jeśli pasuje). Najlepiej byłoby, gdybyś nie wiązał się z dokumentem: jak wspomniano w mojej odpowiedzi, najlepiej byłoby użyć elementu nadrzędnego znajdującego się bliżej łącza. – nnnnnn

3

Aby to w pełni działa w Firefoksie (40.0.3), miałem do wdrożenia .on('mouseup', fn), w następujący sposób:

$(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, dziękuję za edycję. Nie wiem, jak to przegapiłem. : -S – Apache

+0

zabrał mnie w wieku, aby znaleźć swoją literówkę ... – Brandito