Próbuję owinąć głowę wokół funkcji jQuery „.not ()” i napotykam problem. Chciałbym, aby nadrzędny element DIV był „klikalny”, ale jeśli użytkownik kliknie element podrzędny, skrypt nie zostanie wywołany.
$(this).not(children()).click(function(){
$(".example").fadeOut("fast");
});
html:
<div class="example">
<div>
<p>This content is not affected by clicks.</p>
</div>
</div>
e.stopPropagation();
zamiast wreturn false;
tym przypadku.}).find('.classes-to-ignore').click(function(e) {
do wybrania określonych elementów podrzędnyche.stopPropagation()
a potem użyłreturn false
zamiast tego.return false
jest równoważne,e.preventDefault(); e.stopPropagation()
więc może mieć nieoczekiwane skutki uboczne.Używam następujących znaczników i napotkałem ten sam problem:
Tutaj użyłem następującej logiki:
Jeśli chodzi o dokładne pytanie, widzę, że działa w następujący sposób:
lub oczywiście na odwrót:
Mam nadzieję, że to pomoże.
źródło
.on("click", ...)
w najnowszych wersjach jQuery, ponieważ.live()
jest ono przestarzałe od wersji 1.7. Zobacz api.jquery.com/liveMożesz też:
źródło
Moje rozwiązanie:
źródło
Osobiście dodałbym moduł obsługi kliknięcia do elementu podrzędnego, który nic nie robił, ale zatrzymywał propagację kliknięcia. Więc wyglądałoby to mniej więcej tak:
źródło
stopPropagation
i zwracaniem fałszu, jak sugerują inne odpowiedzi?stopPropagation
może być czystszy, ponieważ nie powstrzyma zdarzeń na elementach podrzędnych, co może się zdarzyć w przypadkureturn false
.Oto przykład. Zielony kwadrat to element nadrzędny, a żółty to element podrzędny.
Mam nadzieję, że to pomoże.
źródło