2011-01-08 17 views
5

Quiero detectar cada vez que alguien hace clic en un div (esencialmente quiero saber cuando un usuario interactúa con una sección de texto en mi sitio, ya sea seleccionando un texto o haciendo clic en un enlace), pero no quiero interferir con lo que el usuario está haciendo.Detectando mouse clic en div con Javascript sin efectos secundarios

Si pongo un evento onmousedown o onclick en el div, termina rompiendo selección, enlaces, etc. ¿Hay alguna forma de detectar estos eventos sin causar ninguna interferencia?

+0

A menos que tenga específicamente un código que interfiere (como establecer 'event.cancelBubble', llamar' event.stopPropagation() 'o devolver true (o algo truth-y) su código no debería interferir. ¿Puedes mostrar un ejemplo específico? – RoToRa

Respuesta

2

Sí, sospecho que actualmente está devolviendo false al final del evento de unión, simplemente no hacer eso o cualquiera de las cosas de esta unión:

$('a').click(function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    return false; 
}); 

Si no lo hace cualquiera de estas tres cosas, jQuery no evitará que el evento burbujee en el navegador.

Edit: Lo sentimos, pero no nos dimos cuenta de que era una pregunta simple de JavaScript.

8

Onmousedown o onClick no deben interferir con nada siempre que noreturn false;.

Usted puede hacer esto:

document.getElementById("spy-on-me").onmousedown = function() { 
    console.log("User moused down"); 
    return true; // Not needed, as long as you don't return false 
}; 

Si usted tiene otras secuencias de comandos que va a adjuntar un comportamiento a través de este método en la página, a continuación, para prevenir anulando ellos se puede hacer:

var spyElement = document.getElementById("spy-on-me"); 
var oldMousedown = spyElement.onmousedown; 
spyElement.onmousedown = function() { 
    console.log("User moused down"); 
    if(oldMousedown) oldMousedown(); 
}; 
0

que pueda use hacerlo agregando un detector de eventos también

var myNode= document.querySelector('.imagegrid'); 
myNode.addEventListener("click",function(e){  
alert(e.target+" clicked"); 
}); 

Se demuestra un ejemplo similar here

Cuestiones relacionadas