2010-10-24 12 views
13

Compruebe hacia fuera mi jsFiddle demo, si e.which == 1 luego, cuando hace click h2 lo hará e.which == 2 o e.which == 3 entonces no funcionará. 2 es el botón central del mouse y 3 es el botón derecho del mouse. esto también lo encontré:Jquery: detectar si se hace clic en el botón central o derecho del ratón, si es así, hacer esto:

JQuery proporciona un atributo e.which, que devuelve 1, 2, 3 para el clic izquierdo, medio y derecho, respectivamente. De modo que también podría usar if (e.which == 3) {alert ("clic derecho"); }

Este código no funciona:

código:

$("h2").live('click', function(e) { 
    if(e.which == 2) { 
     e.preventDefault(); 
     alert("middle button"); 
    } 
}); 

Respuesta

23

Es posible que desee atrapar el evento mousedown, y también debe evitar que el evento oncontextmenu detenga el menú contextual al aparecer durante el evento de clic derecho.

$("h2").live('mousedown', function(e) { 
    if((e.which == 1)) { 
    alert("left button"); 
    }if((e.which == 3)) { 
    alert("right button"); 
    }else if((e.which == 2)) { 
     alert("middle button"); 
    } 
    e.preventDefault(); 
}).live('contextmenu', function(e){ 
    e.preventDefault(); 
}); 
+0

Sí, me encontré con que 'contextmenu' era una buena manera de anular el menú integrado . Pero tal vez su primera función podría incluirlo en lugar de virarlo al final. No estoy seguro de por qué está usando en vivo, pero usaría '.bind ('mousedown contextmenu', function ...' – Mottie

+0

lol! @fudgey También sé por qué estaba usando live cuando puede usar window.ready y simplemente adjuntarlo directamente, pero creo que debe tener sus razones. Pero sobre el viraje, hace que el código que pone en la instrucción if se ejecute dos veces. – burntblark

+0

en realidad es solo un fragmento de código que copié, así que no tengo ni idea de por qué Estoy usando .live ... jaja, está bien, entonces trabajaré con lo que tengo arriba, pero ¿pensaste que había algo mejor? y usaré '.bind ('mousedown contextmenu', function' –

2

me he dado cuenta de algunas rarezas en el pasado con el uso del evento click para nada más que un habitual clic izquierdo. No recuerdo los detalles, pero si cambia "click" por "mousedown" o "mouseup" debería obtener mejores resultados.

+0

Tienes razón, clic no funciona, pero funciona para detectar mousedown botones central y derecha – gideon

1

Ahora button se ha ensuciado hasta más allá de todo reconocimiento. De acuerdo con W3C sus valores deben ser:

  • botón Izquierda - 0
  • Botón central - 1
  • botón derecho - 2

acuerdo con Microsoft sus valores deben ser:

  • Botón izquierdo - 1
  • Botón central - 4
  • botón derecho - 2

Sin duda el modelo de Microsoft es mejor que la de W3C. 0 debe significar "no presionar ningún botón", cualquier otra cosa es ilógica.

De http://www.quirksmode.org/js/events_properties.html

+0

[jQuery normaliza las siguientes propiedades para la coherencia entre navegadores: ... 'which'] (http://api.jquery.com/category/events/event-object/). Mejor uso 'which' en lugar de' button'. – Pang

Cuestiones relacionadas