Actualmente estoy usando jQuery para hacer clic en un div y en este div también tengo anclajes. El problema con el que me encuentro es que cuando hago clic en un ancla, ambos eventos de clic se activan (para el div y el ancla). ¿Cómo evito que se active el evento onclick del div cuando se hace clic en un ancla?
Aquí está el código roto:
JavaScript
var url = $("#clickable a").attr("href");
$("#clickable").click(function() {
window.location = url;
return true;
})
HTML
<div id="clickable">
<!-- Other content. -->
<a href="http://foo.com">I don't want #clickable to handle this click event.</a>
</div>
fuente
if( e.target !== this) return;
en el padre es mejor quee.stopPropagation()
en el niño, ya que nunca se sabe si alguien más adjunta algún controlador a los niños, o si una biblioteca debe adjuntar un controlador a un niño (y no desea meterse con el código de la biblioteca). Es una mejor separación de preocupaciones.if( e.target !== this) return;
cheque en el padre significa que si se hace clic en cualquiera de los otros hijos de ese padre que no tienen sus propios controladores onClick, entonces no sucede nada. Por lo tanto, es inútil para una situación en la que tiene, por ejemplo, un div padre cliqueable.e.stopPropagation()
funciona bien sin embargo.