Folgendes berücksichtigen:
<div onclick="alert('you clicked the header')" class="header">
<span onclick="alert('you clicked inside the header');">something inside the header</span>
</div>
Wie kann ich festlegen, dass das Klickereignis des Benutzers nicht ausgelöst wird, wenn der Benutzer auf die Spanne div
klickt?
javascript
html
events
dom
Sam
quelle
quelle
event
scheint auch in Inline-Events in IOS Safari verfügbar zu sein.Es gibt zwei Möglichkeiten, das Ereignisobjekt aus einer Funktion heraus abzurufen:
Wenn Sie ältere Browser unterstützen müssen, die nicht den W3C-Empfehlungen entsprechen, würden Sie im Allgemeinen innerhalb einer Funktion Folgendes verwenden:
Das würde zuerst das eine und dann das andere prüfen und speichern, was auch immer in der Ereignisvariablen gefunden wurde. In einem Inline-Event-Handler gibt es jedoch keinen
e
Objekt zu verwenden. In diesem Fall müssen Sie diearguments
Sammlung nutzen, die immer verfügbar ist und sich auf den vollständigen Satz von Argumenten bezieht, die an eine Funktion übergeben wurden:Im Allgemeinen sollten Sie jedoch Inline-Ereignishandler vermeiden, wenn Sie etwas Kompliziertes wie das Stoppen der Weitergabe benötigen. Es ist mittel- und langfristig eine viel bessere Idee, Ihre Event-Handler separat zu schreiben und sie an Elemente anzuhängen, sowohl aus Gründen der Lesbarkeit als auch der Wartbarkeit.
quelle
onclick="foo(event)"
und dann in der Funktionfunction foo(event){/* do stuff with event */}
. Dies funktioniert sowohl in IE- als auch in W3C-Ereignismodellen.Beachten Sie, dass window.event in FireFox nicht unterstützt wird. Daher muss es sich um Folgendes handeln:
Oder Sie können den W3C-Standard für FireFox verwenden:
Wenn Sie Lust haben, können Sie dies tun:
quelle
<div onclick="myEventHandler(event);">
e.cancelBubble
gibt im IE false zurück! Es kann diee.cancelBubble = true;
Anweisung nicht erreichen . Verwenden Sie stattdessen den Zustand von SoftwareARM !!Verwenden Sie diese Funktion, um festzustellen, ob die richtige Methode vorhanden ist.
quelle
Ich hatte das gleiche Problem - js Fehlerbox im IE - dies funktioniert in allen Browsern, soweit ich sehen kann (event.cancelBubble = true erledigt den Job im IE)
quelle
Das hat bei mir funktioniert
quelle
Für ASP.NET-Webseiten (nicht MVC) können Sie das
Sys.UI.DomEvent
Objekt als Wrapper für native Ereignisse verwenden.oder übergeben Sie das Ereignis als Parameter an die innere Funktion:
und in irgendeiner Funktion:
quelle
Laut dieser Seite benötigen Sie im IE:
event.cancelBubble = true
quelle
Ich kann wegen Karma keinen Kommentar abgeben, also schreibe ich dies als ganze Antwort: Gemäß der Antwort von Gareth (var e = Argumente [0] || window.event; [...]) habe ich diesen Oneliner inline auf dem Onclick für a verwendet schneller Hack:
Ich weiß, dass es spät ist, aber ich wollte Sie wissen lassen, dass dies in einer Zeile funktioniert. Die geschweiften Klammern geben ein Ereignis zurück, an das in beiden Fällen die stopPropagation-Funktion angehängt ist. Deshalb habe ich versucht, sie in geschweiften Klammern zu kapseln, wie in einem if und .... es funktioniert. :) :)
quelle
Dies funktioniert auch - Verwenden Sie im Link-HTML onclick mit der folgenden Rückgabe:
Und dann sollte die Funktion comfirmClick () wie folgt aussehen:
quelle
confirm
ist nicht relevant. Ich beziehe mich auf den Rückgabewert . Zitat: In dem Link HTML verwenden Sie onclick mit Rückkehr wieWarum nicht einfach überprüfen, auf welches Element geklickt wurde? Wenn Sie auf etwas klicken,
window.event.target
wird dem Element, auf das geklickt wurde, und zugewiesen das angeklickte Element kann auch als Argument übergeben werden.Wenn das Ziel und das Element nicht gleich sind, hat sich dieses Ereignis verbreitet.
quelle
quelle
Die beste Lösung wäre, mit dem Ereignis über eine Javascript-Funktion umzugehen, aber um eine einfache und schnelle Lösung mit dem HTML-Element direkt zu verwenden, und sobald "event" und "window.event" veraltet sind und nicht allgemein unterstützt werden ( https://developer.mozilla.org/en-US/docs/Web/API/Window/event ) schlage ich den folgenden "harten Code" vor:
quelle