Tratando de comprender la función jQuery ".not ()", y me encuentro con un problema. Me gustaría que el div primario sea "cliqueable", pero si un usuario hace clic en un elemento secundario, no se llama al script.
$(this).not(children()).click(function(){
$(".example").fadeOut("fast");
});
el html:
<div class="example">
<div>
<p>This content is not affected by clicks.</p>
</div>
</div>
e.stopPropagation();
lugar dereturn false;
para ese caso.}).find('.classes-to-ignore').click(function(e) {
para elegir elementos secundarios específicose.stopPropagation()
y luego usereturn false
en su lugar.return false
es equivalente ae.preventDefault(); e.stopPropagation()
lo que podría tener efectos secundarios inesperados.Estoy usando el siguiente marcado y me encontré con el mismo problema:
Aquí he usado la siguiente lógica:
En términos de la pregunta exacta, puedo ver que funciona de la siguiente manera:
o, por supuesto, al revés:
Espero que ayude.
fuente
.on("click", ...)
en versiones recientes de jQuery como.live()
ha quedado en desuso desde v1.7. Ver api.jquery.com/liveO puedes hacer también:
fuente
Mi solución:
fuente
Personalmente, agregaría un controlador de clic al elemento secundario que no hizo nada más que detener la propagación del clic. Entonces se vería algo así como:
fuente
stopPropagation
y devolver falso como sugieren otras respuestas?stopPropagation
puede estar más limpio, ya que no detendrá la ocurrencia de eventos en elementos secundarios, lo que puede suceder conreturn false
.Aquí hay un ejemplo. El cuadrado verde es padre y el cuadrado amarillo es elemento hijo.
Espero que esto ayude.
fuente