Tengo un div al que he adjuntado un onclickevento. en este div hay una etiqueta con un enlace. Cuando hago clic en el enlace, onclicktambién se activa el evento desde el div. ¿Cómo puedo desactivar esto para que si se hace clic en el enlace en el div onclickno se active?
guión:
$(document).ready(function(){
$(".header").bind("click", function(){
$(this).children(".children").toggle();
});
})
código HTML:
<div class="header">
<a href="link.html">some link</a>
<ul class="children">
<li>some list</li>
</ul>
</div>

$(".header a")con$(".header *")y tengo que hayan sido designados niño (div, formas, de entrada, etc.).relcaja de luz configurada funcioneO, en lugar de tener un controlador de eventos adicional para evitar otro controlador, puede usar el argumento de objeto de evento pasado a su controlador de eventos de clic para determinar si se hizo clic en un elemento secundario.
targetserá el elemento seleccionado ycurrentTargetserá el div .header:fuente
currentTarget. Una solución alternativa es reemplazarlo conthis, como se sugiere en otra respuesta .Mejor manera usando on () con encadenamiento como,
fuente
Las respuestas aquí tomaron la pregunta del OP demasiado literalmente. ¿Cómo se pueden expandir estas respuestas en un escenario donde hay MUCHOS elementos secundarios, no solo una
<a>etiqueta? Aquí hay una manera.Supongamos que tiene una galería de fotos con un fondo oscurecido y las fotos centradas en el navegador. Cuando hace clic en el fondo negro (pero no hay nada dentro), desea que se cierre la superposición.
Aquí hay algunos posibles HTML:
Y así es como funcionaría el JavaScript:
Esto detendrá los eventos de clic de elementos dentro
.contentsde cada investigación,.gallerypor lo que la galería se cerrará solo cuando haga clic en el área de fondo negro desvanecido, pero no cuando haga clic en el área de contenido. Esto se puede aplicar a muchos escenarios diferentes.fuente
Me topé con esta pregunta, buscando otra respuesta.
Quería evitar que todos los niños activen a los padres.
JavaScript:
jQuery:
fuente
O esto:
fuente
return falseal enlace, debe ser cliqueable.La solución más simple es agregar este CSS a los hijos:
fuente
Una forma más corta de hacerlo:
fuente