2012-02-29 13 views
5

Llamo a una función que crea una tabla que incluye varios enlaces.JS: detectar el clic derecho sin jQuery (en línea)

Quiero comprobar si se ha hecho clic en un enlace con el mouse derecho o izquierdo.

Intenté agregar la siguiente parte al hipervínculo <a>.

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

Pero no pasa nada si hago clic en un enlace.

+0

No utilice los atributos intrínsecos del controlador de eventos. Use el enlace de evento DOM en su lugar. – Quentin

+0

Lo he intentado, pero no funcionó para mí. Tal vez porque la tabla se carga más tarde (y no aparece en el código fuente de la página renderizada) –

Respuesta

14

El html:

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

El 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; 
    } 
}​ 

El demo.

+2

Estoy bastante seguro de que, dependiendo del evento global, este objeto solo hace IE – Quentin

+0

@Quentin Al menos, lo probé en Chrome, y funciona – xdazz

+2

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

3

Aquí hay una modificación de la respuesta de xdazz que admite navegadores que usan e.button, normaliza el valor y lo almacena en e.which. Las líneas agregadas son las que se usan en la biblioteca de 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; 
    } 
}​ 
Cuestiones relacionadas