Ja. In den meisten Standard-Browsern, Sie stopPropagation
auf das Ereignis-Objekt aufrufen (live example | source):
<div onclick="alert('Hi, from outer div!');">
<button onclick="alert('Hi, from button!'); event.stopPropagation();">Tha button</button>, Click me!
</div>
Bei älteren Kopien von IE, haben Sie die cancelBubble
Eigenschaft auf true
statt zu setzen:
<div onclick="alert('Hi, from outer div!');">
<button onclick="alert('Hi, from button!'); event.cancelBubble = false;">Tha button</button>, Click me!
</div>
. ..was für die breite Kompatibilität Sie müssen testen, mit denen Sie es zu tun haben, was hässlich wird (live example | source):
<div onclick="alert('Hi, from outer div!');">
<button onclick="alert('Hi, from button!'); if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; }">Tha button</button>, Click me!
</div>
Diese Art von Unterschieden sind, warum ich von den alten Dom0-Stil-Handler empfehle weg immer und eine anständige JavaScript-Bibliothek wie jQuery, Prototype, YUI, Closure oder any of several others verwenden. Diese glätten Unterschiede zwischen Browsern und bieten eine große Menge an nützlichen Funktionen.
Zum Beispiel mit jQuery, diese HTML:
<div id="theDiv">
<button id="theButton">Tha button</button>, Click me!
</div>
... und dieses Skript (live example | source):
$("#theDiv").click(function() {
alert('Hi, from outer div!');
});
$("#theButton").click(function(event) {
alert('Hi, from button!');
event.stopPropagation(); // Even on IE, jQuery provides this
});
oder häufig mit jQuery, sehen Sie nur Menschen return false;
tun in ihrem Ereignishandler. return false;
in einem Handler, in jQuery, tut zwei Dinge: Stoppt die Weitergabe und verhindert jede Standardaktion, die das Ereignis gehabt haben könnte (zum Beispiel in einem Klick-Handler auf einem Link). stopPropgation
verhindert nicht den Standard.
Aber das ist keine Werbung für jQuery (obwohl es insgesamt eine sehr gute Bibliothek ist). Closure, YUI, Prototype und alle anderen haben ähnliche Funktionen, damit Sie sich nicht um diese Art von Browserinkompatibilität kümmern müssen.
Sie möchten [lesen] (http://www.quirksmode.org/js/events_order.html) für Starter – Joseph
mögliche Duplikate von [Prevent übergeordneten Container klicken Ereignis von feuern, wenn Hyperlink geklickt hat] (http://stackoverflow.com/questions/1997084/prevent-parent-container-click-event-from-firing-when-hyperlink-clicked) ... schauen Sie sich stattdessen die Antwort mit der höchsten Wahl an des ausgewählten (wenn Sie jQuery nicht verwenden). –
@FelixKling, Ich benutze Level 1 dom Events ohne Handler, das könnte ein großer Unterschied sein ... –