2009-06-08 7 views
9

ho questo momento:Come rilevare il clic sinistro in qualsiasi punto del documento usando jQuery?

$(document).click(function(e) { alert('clicked'); }); 

In Firefox, questo evento sta sparando quando ho lasciato clic oppure fare clic destro. Voglio solo che spari quando clicco con il tasto sinistro.

Il collegamento di un gestore di clic al documento funziona in modo diverso rispetto al collegamento ad altri elementi? Per altri elementi, sembra solo sparare con clic sinistro.

C'è un modo per rilevare solo clic sinistro oltre a guardare e.button, che dipende dal browser?

Grazie

risposta

20

Prova

$(document).click(function(e) { 
    // Check for left button 
    if (e.button == 0) { 
     alert('clicked'); 
    } 
}); 

Tuttavia, sembra che ci sia una certa confusione sul fatto che IE restituisce 1 o 0 click come a sinistra, potrebbe essere necessario verificare questo :)

Ulteriori leggendo qui: jQuery Gotcha

MODIFICA: mancava il bit dove hai chiesto di non usare e.button. Scusate!

Tuttavia, l'esempio here restituisce lo stesso ID indipendentemente dall'esame in FF o IE e utilizza e.button. potrebbe aver aggiornato il framework jQuery? L'altra risposta è che le versioni precedenti di IE restituiscono un valore diverso, che sarebbe un dolore. Purtroppo ho solo IE 7/8 qui per testare contro.

+1

Sembra che il gestore di clic funzioni in modo diverso a seconda dell'elemento a cui è collegato. Per l'elemento documento, gestisce entrambi i clic sinistro e destro, quindi non sembra esserci alcun modo per controllare e.button. – Emmett

+0

e.button è errato, deve essere e.which –

0

Ho letto che se si esegue il binding con "live" in jQuery 1.3, jQuery normalizza il clic tra i browser. Non ho provato questo.

Tuttavia, questo indicherebbe che non è così: http://abeautifulsite.net/notebook/99

Dal momento che dici clic funziona correttamente in tutto il mondo, ma il "documento" Hai provato un div al 100% sul documento di catturare lo scatto?

0

Non esiste un modo non dipendente dal browser per rilevare solo clic con il tasto sinistro. È possibile utilizzare questo codice che funziona in IE e non IE-browser:

$("#element").live('click', function(e) { 

    if((!$.browser.msie && e.button == 0) || ($.browser.msie && e.button == 1)) { 

     // Left mouse button was clicked (all browsers) 

    } 

}); 

Tratto da: http://abeautifulsite.net/notebook/99

2

Si potrebbe semplicemente registrarsi per un evento "contextmenu" come questo:

$(document).bind("contextmenu",function(e){ 
    return false; 
}); 

Tratto da: http://www.catswhocode.com/blog/8-awesome-jquery-tips-and-tricks

+1

e.preventDefault(); è una pratica migliore invece di restituire false. http://api.jquery.com/event.preventDefault/ – mrzmyr

Problemi correlati