2012-02-29 11 views
5

Sto chiamando una funzione, che crea una tabella che include diversi collegamenti.JS: rileva il clic destro senza jQuery (in linea)

Voglio verificare se un collegamento è stato cliccato con il tasto destro o sinistro del mouse.

Ho provato ad aggiungere la seguente parte al collegamento ipertestuale <a>.

onmousedown="function mouseDown(e){ 
switch (e.which) { 
    case 1: alert('left'); break; 
    case 2: alert('middle'); break; 
    case 3: alert('right'); break; } 
}" 

Ma non succede nulla Se clicco su un collegamento.

+0

Non utilizzare gli attributi del gestore eventi intrinseco. Utilizza invece il bind evento DOM. – Quentin

+0

Ho provato, ma non ha funzionato per me. Forse perché la tabella viene caricata in seguito (e non compare nel codice sorgente della pagina renderizzata) –

risposta

14

il codice HTML:

<a href="#" onmousedown="mouseDown(event);">aaa</a>​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

Il javascript:

function mouseDown(e) { 
    e = e || window.event; 
    switch (e.which) { 
    case 1: alert('left'); break; 
    case 2: alert('middle'); break; 
    case 3: alert('right'); break; 
    } 
}​ 

Il demo.

+2

Sono abbastanza sicuro che, a seconda dell'oggetto globale dell'evento, questo IE-only – Quentin

+0

@Quentin, almeno, l'ho provato in Chrome, e funziona – xdazz

+2

chrome: sì, firefox: no, IE9: no: \ –

3

Ecco una modifica della risposta di xdazz che supporta i browser che utilizzano e.button, normalizza il valore e lo memorizza in e.which. Le linee aggiunte sono quelle che vengono utilizzate nella libreria JQuery.

function mouseDown(e) { 
    e = e || window.event; 
    if (!e.which && e.button !== undefined) { 
    e.which = (e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0))); 
    } 
    switch (e.which) { 
    case 1: alert('left'); break; 
    case 2: alert('middle'); break; 
    case 3: alert('right'); break; 
    } 
}​ 
Problemi correlati