Ich habe versucht, meinen Kopf um die jQuery-Funktion ".not ()" zu wickeln, und bin auf ein Problem gestoßen. Ich möchte, dass das übergeordnete div "anklickbar" ist, aber wenn ein Benutzer auf ein untergeordnetes Element klickt, wird das Skript nicht aufgerufen.
$(this).not(children()).click(function(){
$(".example").fadeOut("fast");
});
das HTML:
<div class="example">
<div>
<p>This content is not affected by clicks.</p>
</div>
</div>
e.stopPropagation();
anstelle vonreturn false;
für diesen Fall verwenden.}).find('.classes-to-ignore').click(function(e) {
, um bestimmte untergeordnete Elemente auszuwählene.stopPropagation()
und dannreturn false
stattdessen benutzen .return false
ist gleichbedeutend mite.preventDefault(); e.stopPropagation()
unerwarteten Nebenwirkungen.Ich verwende folgendes Markup und habe das gleiche Problem festgestellt:
Hier habe ich folgende Logik verwendet:
In Bezug auf die genaue Frage kann ich sehen, dass dies wie folgt funktioniert:
oder natürlich umgekehrt:
Hoffentlich hilft das.
quelle
.on("click", ...)
in neueren Versionen von jQuery verwenden, da.live()
diese seit Version 1.7 veraltet sind. Siehe api.jquery.com/liveOder Sie können auch:
quelle
Meine Lösung:
quelle
Ich persönlich würde dem untergeordneten Element einen Klick-Handler hinzufügen, der nichts anderes tut, als die Weitergabe des Klicks zu stoppen. Es würde also ungefähr so aussehen:
quelle
stopPropagation
und der Rückgabe von Falsch, wie andere Antworten vermuten lassen?stopPropagation
sauberer zu sein, da es nicht verhindert, dass Ereignisse auf untergeordneten Elementen auftreten, die bei auftreten könnenreturn false
.Hier ist ein Beispiel. Grünes Quadrat ist übergeordnetes Element und gelbes Quadrat ist untergeordnetes Element.
Hoffe das hilft.
quelle