Die Reihenfolge der Ereignisse
Angenommen, ein anderes Element ist in einem Element verschachtelt und beide haben einen Onclick -Event -Handler. Wenn der Benutzer auf Element 2 klickt, werden die Klickereignisse von Element 1 und Element 2 ausgelöst. Aber welches Ereignis wird zuerst ausgelöst? Welche Event -Handler -Funktion wird zuerst ausgeführt? Mit anderen Worten, wie hoch ist die Reihenfolge, in der Ereignisse auftreten? Wie in der folgenden Abbildung gezeigt, werden die Drei -Klick -Ereignisse ausgelöst, wenn der Span -Element -Bereich geklickt wird, aber wie lautet die Reihenfolge?
<div onclick = "func1"> <p onclick = "func2"> <span onclick = "" func3> </span> </p> </div>
Zwei Modelle
Netscape und Microsoft haben zwei völlig unterschiedliche Methoden zur Behandlung dieses Ereignisses:
• Netscape befürwortet, dass Ereignisse von der äußersten Schicht bis zum spezifischsten Element auftreten werden, und diese Folge von Ereignissen wird als Erfassungsart bezeichnet
• Microsoft hält Ereignisse vom innersten Element aus und breitet sich dann nach oben aus. Diese Folge von Ereignissen wird als Bubble -Typ bezeichnet
Die Reihenfolge dieser beiden Ereignisse ist völlig entgegengesetzt. Der Explorer -Browser unterstützt nur Bubble -Events, sowohl Mozilla, Opera7 als auch Konqueror. Die ältere Oper und ICAB unterstützen auch nicht
W3c
Jedes Ereignis, das im W3C -Ereignismodell auftritt, tritt zunächst in die Erfassungsstufe ein, bis das Zielelement erreicht ist und dann in die Blasenstufe eintritt.
Für die normale Webentwicklung können Sie auswählen, ob die Ereignishandlerfunktion in der Erfassungsstufe oder in der Blasenstufe binden. Dies wird durch die addEventListener () -Methode erreicht. Wenn der Parameter usecapture dieser Funktion wahr ist, ist die Funktion in der Erfassungsstufe gebunden und umgekehrt ist die Funktion in der Blasenstufe gebunden.
Element.AddeVentListener (Ereignis, Funktion, Usecapture)
Stoppen Sie Blasen
Wenn Sie während der normalen Entwicklung die Ausbreitung von Ereignissen verhindern möchten, können Sie dies durch eine Methode tun.
Im Modell von Microsoft müssen Sie die AbbrechenBubble -Eigenschaft der Veranstaltung auf true festlegen
window.event.cancelBubble = true
Im W3C -Modell müssen Sie die StopPropagation () -Methode des Ereignisses aufrufen
E.Stoppropagation ()
Wenn Sie diese Methoden aufrufen, verhindern Sie, dass sich alle Blasen nach außen ausbreiten. Cross-Browser-Lösung:
Funktion dosomething (e) {if (! e) {var e = window.event; e.cancelBubble = true; } if (e.StopPropagation) {e.StopPropagation (); }}Der obige Artikel ausführlich Verständnis für Ereignisblasen und Ereigniserfassung ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.