Estoy usando el onclick
evento de un enlace hash para abrir <div>
una ventana emergente. Pero el clic del medio no desencadena el onclick
evento, solo toma el href
valor del atributo del enlace y carga la URL en una nueva página. ¿Cómo puedo usar el clic central para abrir el <div>
como una ventana emergente?
javascript
jquery
Sadesh Kumar N
fuente
fuente
Respuestas:
EDITAR
Esta respuesta ha quedado obsoleta y no funciona en Chrome. Lo más probable es que termine utilizando el evento auxlink , pero consulte otras respuestas a continuación.
/EDITAR
La respuesta de Beggs es correcta, pero parece que desea evitar la acción predeterminada del clic central. En cuyo caso, incluya lo siguiente
$("#foo").on('click', function(e) { if (e.which == 2) { e.preventDefault(); alert("middle button"); } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a id="foo" href="http://example.com">middle click me</a>
preventDefault () detendrá la acción predeterminada del evento.
fuente
.live
fue obsoleto y eliminado a favor de.on
2
?Para que se detecte el botón de clic central / rueda del mouse, debe usar el evento
auxclick
. P.ej:<a href="https://example.com" onauxclick="func()" id="myLink"></a>
Luego en su archivo de script
function func(e) { if (e.button == 1) { alert("middle button clicked") } }
Si desea hacerlo desde JavaScript (sin usar el atributo HTML
onauxclick
), entonces vayaaddEventListener
al elemento:let myLink = document.getElementById('myLink') myLink.addEventListener('auxclick', function(e) { if (e.button == 1) { alert("middle button clicked") } })
<a id="myLink" href="http://example.com">middle click me</a>
Consulte la página de mdn sobre el
auxclick
evento aquí .fuente
if(event.button==1)
cláusula, esta es la única respuesta que funciona.auxclick
evento como verificar el valor dee.button == 1
. Edité la respuesta.Puedes usar
event.button
para identificar en qué botón del mouse se hizo clic.
Devuelve un valor entero que indica el botón que cambió de estado.
Tenga en cuenta que esta convención no se sigue en Internet Explorer: consulte QuirksMode para obtener más detalles.
El orden de los botones puede ser diferente según cómo se haya configurado el dispositivo señalador.
También leer
¿En qué botón del mouse se hizo clic?
document.getElementById('foo').addEventListener('click', function(e) { console.log(e.button); e.preventDefault(); });
<a id="foo" href="http://example.com">middle click me</a>
fuente
event.which
ya que se ha estandarizado en todos los navegadores en la fuente jQuery - línea 2756 -if ( !event.which && event.button ) event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
MouseEvent.which
no está definido en ninguna especificación, peroMouseEvent.button
está definido en DOM L2 Events.event.which
pero debería haber elaborado queMouseEvent.which
no es parte de la especificación oficial.Por lo general, odio cuando la gente ofrece alternativas en lugar de soluciones, pero como las soluciones ya se han proporcionado, voy a romper mi propia regla.
Los sitios web donde se anula la función de clic central tienden a molestarme mucho, realmente. Por lo general, hago clic en el medio porque quiero abrir el nuevo contenido en una nueva pestaña mientras tengo una vista sin obstáculos del contenido actual. Siempre que pueda dejar la funcionalidad del clic central sola y hacer que el contenido relevante esté disponible a través del atributo HREF del elemento en el que hizo clic, creo firmemente que eso es lo que debe hacer.
fuente
jQuery proporciona un
.which
atributo en el evento que da la identificación del botón de clic de izquierda a derecha como 1, 2, 3. En este caso, desea 2.Uso:
$("#foo").live('click', function(e) { if( e.which == 2 ) { alert("middle button"); } });
La respuesta de Adamantium también funcionará, pero debe tener cuidado con IE como señala:
$("#foo").live('click', function(e) { if((!$.browser.msie && e.button == 1) || ($.browser.msie && e.button == 2)) { alert("middle button"); } });
También recuerde que el
.button
atributo tiene un índice 0, no un índice 1 como.which
.fuente
Esta pregunta es un poco vieja, pero encontré una solución:
$(window).on('mousedown', function(e) { if( e.which == 2 ) { e.preventDefault(); } });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a href="http://example.com">middle click me</a>
Chrome no activa el evento "clic" para la rueda del mouse
Trabaja en FF y Chrome
fuente
e.preventDefault()
se llame.El método adecuado es usar
.on
, ya que.live
se ha desaprobado y luego se eliminó de jQuery:$("#foo").on('click', function(e) { if( e.which == 2 ) { e.preventDefault(); alert("middle button"); } });
O si desea la sensación de "en vivo" y
#foo
no está en su página al inicio del documento:$(document).on('click', '#foo', function(e) { if( e.which == 2 ) { e.preventDefault(); alert("middle button"); } });
respuesta original
fuente
click
no funciona para el botón central del mouse en navegadores como Firefox y Chrome.Sé que llego tarde a la fiesta, pero para aquellos que todavía tienen problemas con el manejo del clic central, verifique si delega el evento. En caso de delegación, el
click
evento no se dispara. Comparar:Esto funciona para clics intermedios:
$('a').on('click', function(){ console.log('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <a href="http://example.com">middle click me</a>
Esto no funciona para clics intermedios:
$('div').on('click', 'a', function(){ alert('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <a href="http://example.com">middle click here</a> </div>
Si aún necesita rastrear el clic central usando la delegación de eventos , la única forma de evitarlo, como se indica en el ticket de jQuery correspondiente , es usar
mousedown
o en sumouseup
lugar. Al igual que:Esto funciona para clics intermedios delegados:
$('div').on('mouseup', 'a', function(){ console.log('middle click'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <a href="http://example.com">middle click me</a> </div>
Véalo en línea aquí .
fuente
click
no funciona para clics intermedios como en su primer ejemplo.