Tengo un DIV con una clase foobar
, y algunos DIV dentro de ese DIV que no están clasificados, pero supongo que están heredando la foobar
clase:
$('.foobar').on('click', function() { /*...do stuff...*/ });
Quiero que se active solo cuando haga clic en algún lugar del DIV pero no en sus DIV secundarios.
===
o!==
utiliza el "Algoritmo de comparación de igualdad estricto" , mientras que el==
y!=
utiliza el "Algoritmo de comparación de igualdad abstracta" , que es de tipo coercitivo. La sabiduría general es usar siempre una comparación estricta a menos que haya una necesidad específica del tipo coercitivo (ya que sus reglas son un poco complejas) . En este caso, debido a que los objetos se están comparando, realmente no hace la diferencia, pero encontrará que la mayoría de las personas aún se apegarán a la comparación estricta .Hay otra forma que funciona si no te importa solo apuntar a navegadores más nuevos. Solo agrega el CSS
a cualquier hijo del div que desee capturar el clic. Aquí están las tablas de soporte.
http://caniuse.com/#feat=pointer-events
fuente
click
que el activador de evento de clic programático debe estar bloqueado?Puedes usar el burbujeo a tu favor:
fuente
<a>
elementos descendientes . Solo hay un problema: cuando hago clic con el botón central en ellos, el evento aún se dispara (probado en Google Chrome). ¿Hay una variante de esto que también lo impide?No obtuve la respuesta aceptada para trabajar, pero esto parece funcionar, al menos en vanilla JS.
fuente
this
porque el objeto al quethis
apunta puede cambiar según el alcance y el contexto desde donde se llamaEsto detendrá la propagación (burbujeo) del
click
evento en cualquiera de los elementos secundarios del.foobar
elemento (s) para que el evento no llegue al.foobar
elementos para activar sus controladores de eventos.Aquí hay una demostración: http://jsfiddle.net/bQQJP/
fuente
fuente
Tuve el mismo problema y se me ocurrió esta solución (basada en las otras respuestas)
Básicamente dice que si el objetivo es el div, ejecute el código; de lo contrario, no haga nada (no lo oculte)
fuente
Mi caso es similar, pero esta es una ocasión en la que tienes pocos
foobar
-s y desea cerrar solo uno por cada clic:Encuentra el caso de los padres
Encontrar caso de niño
fuente
Puede usar event.currentTarget. Solo hará clic en el evento elemnt que obtuvo el evento.
fuente
Si no puede usar
pointer-events: none;
y está apuntando a navegadores modernos, puede usarcomposedPath
para detectar un clic directo en el objeto de la siguiente manera:Puede leer más sobre compositePath aquí: https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
fuente
fuente