2013-06-16 20 views
7

Desidero mostrare una finestra di dialogo jQuery-UI come popup quando l'utente fa clic sul pulsante sinistro del mouse o su quello centrale. Funziona per il clic sinistro (ricevo la finestra di avviso e poi il popup) ma non funziona per mezzo (né casella di avviso né popup). Cosa mi manca?Rilevamento evento click del mouse centrale jQuery

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

provato su Chrome, FF e IE10. –

risposta

15

Usa mousedown o mouseup invece di click. E (a meno che non si sta utilizzando un molto vecchia versione di jQuery) utilizzano .on() invece di .live():

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

... dove idealmente devi usare un elemento padre molto più vicino al link che document.

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

+0

Bene, grazie. –

+0

Perché stai passando '" a.external "' come dati al gestore eventi? Non stava usando quello come il selettore? – Nate

+3

@Nate - Non sto passando '" a.external "' come dati, questo è il selettore per un evento delegato. Dai un'occhiata alla ['.on()' documentazione] (http://api.jquery.com/on/). In questo caso l'evento mouse è associato al documento, ma quando si verifica, jQuery controlla automaticamente se l'elemento source corrisponde al selettore in quel secondo argomento (e chiama la funzione solo se corrisponde). Idealmente non ti legherei al documento: come accennato nella mia risposta idealmente useresti un elemento genitore più vicino al link. – nnnnnn

3

Per ottenere questo lavoro completamente in Firefox (40.0.3), ho dovuto implementare .on('mouseup', fn), come segue:

$(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, grazie per la modifica. Non so come mi sia mancato. : -S – Apache

+0

ho impiegato anni per trovare il tuo errore ... – Brandito