Ich habe einen DIV mit einer Klasse foobar
und ein paar DIVs in diesem DIV, die nicht klassifiziert sind, aber ich nehme an, sie erben die foobar
Klasse:
$('.foobar').on('click', function() { /*...do stuff...*/ });
Ich möchte, dass das nur ausgelöst wird, wenn irgendwo im DIV geklickt wird, nicht aber auf die untergeordneten DIVs.
===
oder!==
verwendet den "Strict Equality Comparison Algorithm" , während das==
und!=
den "Abstract Equality Comparison Algorithm" verwendet , der vom Typ Zwang ist. Die allgemeine Weisheit ist, immer einen strengen Vergleich zu verwenden, es sei denn, es besteht ein spezifischer Bedarf für den Zwangstyp (da seine Regeln etwas komplex sind) . In diesem Fall macht es keinen Unterschied, da Objekte verglichen werden, aber Sie werden feststellen, dass die meisten Menschen sich immer noch an den strengen Vergleich halten.Es gibt eine andere Möglichkeit, die funktioniert, wenn es Ihnen nichts ausmacht, nur auf neuere Browser abzuzielen. Fügen Sie einfach das CSS hinzu
an alle Kinder des Div, die Sie den Klick erfassen möchten. Hier sind die Support-Tabellen
http://caniuse.com/#feat=pointer-events
quelle
click
Auslöser für programmgesteuerte Klickereignisse blockiert wird?Sie können das Sprudeln zu Ihren Gunsten verwenden:
quelle
<a>
Elemente ausschließen möchte . Es gibt nur ein Problem: Wenn ich mit der mittleren Maustaste darauf klicke, wird das Ereignis immer noch ausgelöst (in Google Chrome getestet). Gibt es eine Variante davon, die dies auch verhindert?Ich habe nicht die akzeptierte Antwort auf die Arbeit bekommen, aber dies scheint den Trick zu tun, zumindest in Vanilla JS.
quelle
this
da sich das Objekt, auf dasthis
es zeigt, je nach Umfang und Kontext ändern kann, von dem aus es aufgerufen wirdDadurch wird die Ausbreitung (Blasenbildung) des
click
Ereignisses auf einem der untergeordneten Elemente des.foobar
Elements gestoppt, sodass das Ereignis die.foobar
Elemente nicht erreicht , um deren Ereignishandler auszulösen.Hier ist eine Demo: http://jsfiddle.net/bQQJP/
quelle
quelle
Ich hatte das gleiche Problem und fand diese Lösung (basierend auf den anderen Antworten)
Grundsätzlich heißt es, wenn das Ziel das Div ist, dann führen Sie den Code aus, sonst tun Sie nichts (verstecken Sie ihn nicht)
quelle
Mein Fall ist ähnlich, aber dies ist eine Gelegenheit, wenn Sie nur wenige
foobar
-s haben und nur eine schließen möchten - pro einen Klick:Suchen Sie den übergeordneten Fall
Finden Sie einen Kinderfall
quelle
Sie können event.currentTarget verwenden. Es wird nur ein Klickereignis angezeigt, das ein Ereignis erhalten hat.
quelle
Wenn Sie
pointer-events: none;
moderne Browser nicht verwenden können und auf diese abzielen, können SiecomposedPath
einen direkten Klick auf das Objekt wie folgt erkennen:Weitere Informationen zu composPath finden Sie hier: https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
quelle
quelle