2011-09-08 7 views
6

Al tratar de detectar un clic derecho del mouse con jquery, noté que el controlador de eventos click no parece dispararse con un clic derecho, mientras que el mousedown o mouseup evento controlador de hacer.No se puede usar el controlador de eventos click de jquery para detectar el clic derecho

Por ejemplo, después de un clic derecho en el div prueba, 'prueba' las siguientes alertas:

$('#test').mousedown(function(e) { 
    alert('testing'); 
}); 

Sin embargo, el siguiente no no:

$('#test').click(function(e) { 
    alert('testing!'); 
}); 

¿El Alguien sabe por qué?

+1

esto debería darle su respuesta: http://stackoverflow.com/questions/1206203/how-to-distinguish-between-left-and-right-mouse-click-with-jquery –

+0

En Firefox, ni en el medio ni el botón derecho del mouse es detectado por $ (elem) .click (...). En Chrome, el medio funciona, pero no el derecho ... Además, tenga en cuenta que antes de – jbyrd

+0

@Stefan H, no, ya leí esa publicación y lamentablemente ninguna de las respuestas se ocupa de mi pregunta. – jbyrd

Respuesta

8

Como este article pone:

No hay clic eventos para el botón de clic derecho en cualquier navegador.

Te quedan mousedown y mouseup en la mayoría de los navegadores.

+3

Aha, eso tiene sentido, gracias por el artículo. Entonces, otra forma de decirlo es: *** un clic con el botón derecho del mouse no activa un evento de clic *** (solo un mousedown y un evento de mouseup). – jbyrd

+1

El artículo no es del todo exacto, ya que Firefox (¿y tal vez IE?) Activará los eventos de clic derecho enlazados con 'document'. –

12

Cuando mouseDown, incluso el despedido tiene event.which

Tomado de aquí: How to distinguish between left and right mouse click with jQuery

$('#element').mousedown(function(event) { 
    switch (event.which) { 
     case 1: 
      alert('Left mouse button pressed'); 
      break; 
     case 2: 
      alert('Middle mouse button pressed'); 
      break; 
     case 3: 
      alert('Right mouse button pressed'); 
      break; 
     default: 
      alert('You have a strange mouse'); 
    } 
}); 

Así que en lugar de utilizar .click(), el uso mousedown y comprobar si los casos.

+0

-1 - Stephen H ya me refirió a esa publicación pero dije que eso no ayudó. Mi pregunta es * por qué * necesito usar mousedown en lugar de hacer clic (ya sé que es una solución). – jbyrd

+0

@Wes - Pero un "clic" es un mousedown _plus_ un mouseup - incluso si el mouse se mueve fuera del elemento y vuelve a encenderse entre medio y arriba siempre que no haya ningún mouseup mientras está desactivado, por lo que solo se atrapa el mousedown por sí solo queda la mitad del trabajo. Existe un complemento jQuery para el mouse derecho: http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/ – nnnnnn

0

No está seguro de qué navegador (s) que haya probado con, pero de acuerdo con MSDN las onclick fuegos "cuando el usuario hace clic en el izquierda botón del ratón". Es decir, por definición no ocurre para clics correctos (o medios). Dado que está en MSDN, puede esperar que IE se comporte de esa manera independientemente de lo que hagan los otros navegadores.

(Onclick también dispara para ciertas cosas no ratón, como cambiar ciertos elementos de formulario con el teclado, etc.)

sé jQuery intenta normalizar el comportamiento entre los navegadores, pero si el navegador no se dispara el event ...

Hay al menos un plugin de jQuery que conozco que implementa haciendo clic con el botón derecho: http://abeautifulsite.net/blog/2008/05/jquery-right-click-plugin/ (No lo he usado, pero se ve bien excepto que indica que Opera no es compatible eso).

0

También he probado el código siguiente para coger botón derecho del ratón para cierta clase de elementos

$(".brick").mousedown(function (event) { 
      if (event.which === 3) { 
       currentRightClickedTileID = $(this).attr("id"); 
      } 
     }); 

Este código no siempre coger el botón derecho del ratón.

Cuestiones relacionadas