Heim Web-Frontend js-Tutorial Warum wird das Event-Bubbling mehrmals ausgelöst?

Warum wird das Event-Bubbling mehrmals ausgelöst?

Feb 24, 2024 pm 08:33 PM
事件冒泡 wiederholen auslösen

Warum wird das Event-Bubbling mehrmals ausgelöst?

Warum wird das Event Sprudeln zweimal ausgelöst?

In der Frontend-Entwicklung stoßen wir häufig auf das Konzept des Event-Bubblings. Ereignis-Bubbling bedeutet, dass, wenn ein bestimmtes Ereignis eines Elements auf der Seite ausgelöst wird, das Ereignis Schicht für Schicht an das obere Element weitergeleitet wird, bis es schließlich an das Dokumentobjekt übergeben wird.

Allerdings kann es manchmal vorkommen, dass Ereignisse zweimal sprudeln und ausgelöst werden, selbst wenn wir den Ereignis-Listener nur einmal binden. Warum tritt also das Phänomen der wiederholten Auslösung auf? Lassen Sie uns weiter unten auf die möglichen Gründe eingehen.

Zunächst müssen wir das Konzept klären, wie Event-Bubbling im Browser funktioniert. Wenn der Browser ein bestimmtes Ereignis für ein Element auslöst, durchläuft er ausgehend vom Element den DOM-Baum und prüft, ob für jedes übergeordnete Element ein Ereignishandler an das Ereignis gebunden ist. Wenn ein Ereignishandler gefunden wird, führt der Browser den Handler aus und setzt den Durchlauf bis zum Dokumentobjekt fort. Dieser Prozess ist ereignissprudelnd.

Es ist jedoch wichtig zu beachten, dass das Ereignis-Bubbling nicht nur an übergeordnete Elemente, sondern auch an Vorgängerelemente weitergegeben wird. Das heißt, das Ereignis-Bubbling löst wiederholt Ereignishandler für übergeordnete und übergeordnete Elemente aus. Dies kann dazu führen, dass das Ereignis zweimal ausgelöst wird.

Die Frage ist also, warum das Ereignissprudeln auf Vorfahrenelemente übergeht? Dies liegt daran, dass wir beim Binden von Ereignis-Listenern normalerweise die Ereignisdelegierung verwenden. Das heißt, binden Sie den Ereignis-Listener an das übergeordnete Element und lassen Sie dann das übergeordnete Element das Ereignis anstelle seines untergeordneten Elements durch Ereignisblasen verarbeiten.

Wenn der von uns gebundene Ereignis-Listener sowohl im übergeordneten Element als auch im Vorgängerelement vorhanden ist, wird das Ereignis-Bubbling zweimal ausgelöst. Dies liegt daran, dass der Browser beim Durchlaufen des DOM-Baums prüft, ob an jedes übergeordnete Element und Vorgängerelement derselbe Ereignishandler gebunden ist. Falls vorhanden, werden sie vom Browser ausgeführt.

Um dieses Problem besser zu verstehen, finden Sie unten ein spezifisches Codebeispiel:

HTML-Code:

<div id="parent">
  <div id="child">Click me!</div>
</div>
Nach dem Login kopieren

JavaScript-Code:

var parent = document.getElementById('parent');
var child = document.getElementById('child');

parent.addEventListener('click', function() {
  console.log('Parent Clicked!');
});

child.addEventListener('click', function() {
  console.log('Child Clicked!');
});
Nach dem Login kopieren

Im obigen Code haben wir sowohl auf das übergeordnete als auch auf das untergeordnete Element geklickt Der Ereignis-Listener für das Ereignis. Wenn wir auf das untergeordnete Element klicken, gibt die Konsole die Ergebnisse zweimal aus: „Untergeordnetes Element angeklickt!“ und „Übergeordnetes Element angeklickt!“. Dies liegt daran, dass das Ereignis-Bubbling zweimal ausgelöst wird: Zuerst wird der Ereignis-Listener des untergeordneten Elements ausgeführt, und dann wird der Ereignis-Listener des übergeordneten Elements ausgeführt.

Um das Problem zu vermeiden, dass die Ereignisblase zweimal ausgelöst wird, können wir die Methode stopPropagation() verwenden, um zu verhindern, dass das Ereignis weiter sprudelt. Im obigen Code können wir beispielsweise eine Codezeile zum Ereignis-Listener des untergeordneten Elements hinzufügen:

child.addEventListener('click', function(event) {
  console.log('Child Clicked!');
  event.stopPropagation();
});
Nach dem Login kopieren

Nach Verwendung der stopPropagation()-Methode wird nur der Ereignis-Listener des untergeordneten Elements und das Ereignis ausgeführt Der Listener des übergeordneten Elements wird nicht erneut ausgeführt. Auf diese Weise können wir das Problem vermeiden, dass Ereignisse zweimal sprudeln und ausgelöst werden.

Zusammenfassend lässt sich sagen, dass der Grund dafür, dass das Ereignis-Bubbling zweimal ausgelöst wird, darin besteht, dass das Ereignis-Bubbling an Ereignishandler für übergeordnete und Vorgängerelemente übergeben wird. Um dieses Problem zu lösen, können wir die Methode stopPropagation() verwenden, um zu verhindern, dass das Ereignis nach oben sprudelt.

Ich hoffe, dass die Leser durch die Einführung dieses Artikels ein umfassenderes Verständnis des Prinzips des Event-Bubblings und der Gründe dafür erlangen, warum es zweimal ausgelöst wird, und effektive Lösungen finden können, wenn dieses Problem in der tatsächlichen Entwicklung auftritt.

Das obige ist der detaillierte Inhalt vonWarum wird das Event-Bubbling mehrmals ausgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verstehen Sie den Event-Bubbling-Mechanismus: Warum wirkt sich ein Klick auf ein untergeordnetes Element auf das Ereignis des übergeordneten Elements aus? Verstehen Sie den Event-Bubbling-Mechanismus: Warum wirkt sich ein Klick auf ein untergeordnetes Element auf das Ereignis des übergeordneten Elements aus? Jan 13, 2024 pm 02:55 PM

Ereignis-Bubbling verstehen: Warum löst ein Klick auf ein untergeordnetes Element ein Ereignis auf dem übergeordneten Element aus? Ereignis-Bubbling bedeutet, dass in einer verschachtelten Elementstruktur, wenn ein untergeordnetes Element ein Ereignis auslöst, das Ereignis wie beim Bubbling Schicht für Schicht an das übergeordnete Element weitergegeben wird, bis zum äußersten übergeordneten Element. Mit diesem Mechanismus können Ereignisse an untergeordneten Elementen im gesamten Elementbaum verbreitet werden und nacheinander alle zugehörigen Elemente auslösen. Um das Bubbling von Ereignissen besser zu verstehen, schauen wir uns einen bestimmten Beispielcode an. HTML-Code: <divid="parent&q

Warum wird das Event-Bubbling zweimal ausgelöst? Warum wird das Event-Bubbling zweimal ausgelöst? Feb 22, 2024 am 09:06 AM

Warum wird das Event-Bubbling zweimal ausgelöst? Ereignisblasen (Event Bubbling) bedeutet, dass im DOM, wenn ein Element ein Ereignis auslöst (z. B. ein Klickereignis), das Ereignis vom Element zum übergeordneten Element übergeht, bis es zum Dokumentobjekt der obersten Ebene übergeht. Das Ereignis-Bubbling ist Teil des DOM-Ereignismodells, das es Entwicklern ermöglicht, Ereignis-Listener an übergeordnete Elemente zu binden, sodass, wenn untergeordnete Elemente Ereignisse auslösen, diese Ereignisse erfasst und über den Bubbling-Mechanismus verarbeitet werden können. Manchmal stoßen Entwickler jedoch auf Ereignisse, die zweimal auftreten und ausgelöst werden.

Gründe und Lösungen für den Fehler von jQuery .val() Gründe und Lösungen für den Fehler von jQuery .val() Feb 20, 2024 am 09:06 AM

Titel: Gründe und Lösungen für das Scheitern von jQuery.val() In der Front-End-Entwicklung wird jQuery häufig zum Betreiben von DOM-Elementen verwendet. Die Methode .val() wird häufig zum Abrufen und Festlegen des Werts von Formularelementen verwendet. Manchmal stoßen wir jedoch auf Situationen, in denen die Methode .val() fehlschlägt, was dazu führt, dass der Wert des Formularelements nicht korrekt abgerufen oder festgelegt werden kann. In diesem Artikel werden die Ursachen des .val()-Fehlers untersucht, entsprechende Lösungen bereitgestellt und spezifische Codebeispiele angehängt. 1.Ursachenanalyse.val() Methode

Warum kann das Klickereignis in js nicht wiederholt ausgeführt werden? Warum kann das Klickereignis in js nicht wiederholt ausgeführt werden? May 07, 2024 pm 06:36 PM

Klickereignisse in JavaScript können aufgrund des Event-Bubbling-Mechanismus nicht wiederholt ausgeführt werden. Um dieses Problem zu lösen, können Sie die folgenden Maßnahmen ergreifen: Verwenden Sie die Ereigniserfassung: Geben Sie einen Ereignis-Listener an, der ausgelöst wird, bevor das Ereignis in die Luft sprudelt. Übergabe von Ereignissen: Verwenden Sie event.stopPropagation(), um das Sprudeln von Ereignissen zu stoppen. Verwenden Sie einen Timer: Lösen Sie den Ereignis-Listener nach einiger Zeit erneut aus.

Für welche Szenarien können Ereignismodifikatoren in Vue verwendet werden? Für welche Szenarien können Ereignismodifikatoren in Vue verwendet werden? May 09, 2024 pm 02:33 PM

Vue.js-Ereignismodifikatoren werden verwendet, um bestimmte Verhaltensweisen hinzuzufügen, darunter: Verhindern von Standardverhalten (.prevent), Stoppen von Ereignisblasen (.stop), Einmaliges Ereignis (.once), Erfassen von Ereignissen (.capture), Passives Abhören von Ereignissen (.passive), Adaptiv Modifikator (.self)Schlüsselmodifikator (.key)

Wie extrahiere ich nur ein Stück doppelter Daten in der Oracle-Datenbank? Wie extrahiere ich nur ein Stück doppelter Daten in der Oracle-Datenbank? Mar 09, 2024 am 09:03 AM

Wie extrahiere ich nur ein Stück doppelter Daten in der Oracle-Datenbank? Im täglichen Datenbankbetrieb stoßen wir häufig auf Situationen, in denen wir doppelte Daten extrahieren müssen. Manchmal möchten wir eine der doppelten Daten finden, anstatt alle doppelten Daten aufzulisten. In der Oracle-Datenbank können wir diesen Zweck mithilfe einiger SQL-Anweisungen erreichen. Als Nächstes stellen wir vor, wie man nur ein Stück doppelter Daten aus der Oracle-Datenbank extrahiert, und stellen spezifische Codebeispiele bereit. 1. Verwenden Sie die ROWID-Funktion. ROWID ist Ora

Warum wird der Event-Bubbling-Mechanismus zweimal ausgelöst? Warum wird der Event-Bubbling-Mechanismus zweimal ausgelöst? Feb 25, 2024 am 09:24 AM

Warum kommt es zweimal hintereinander zum Event-Bubbling? Das Bubbling von Ereignissen ist ein wichtiges Konzept in der Webentwicklung. Es bedeutet, dass, wenn ein Ereignis in einem verschachtelten HTML-Element ausgelöst wird, das Ereignis vom innersten Element zum äußersten Element übergeht. Dieser Vorgang kann manchmal zu Verwirrung führen. Ein häufiges Problem besteht darin, dass die Ereignisblase zweimal hintereinander auftritt. Um besser zu verstehen, warum Event-Bubbling zweimal hintereinander auftritt, schauen wir uns zunächst ein Codebeispiel an:

Welche JS-Events sprudeln nicht? Welche JS-Events sprudeln nicht? Feb 19, 2024 pm 09:56 PM

Welche Situationen gibt es bei JS-Ereignissen, in denen keine Blasen entstehen? Ereignisblasen (Event Bubbling) bedeutet, dass nach dem Auslösen eines Ereignisses eines Elements das Ereignis vom innersten Element zum äußersten Element nach oben übertragen wird. Diese Übertragungsmethode wird als Ereignisblasen bezeichnet. Allerdings können nicht alle Ereignisse sprudeln. Es gibt einige Sonderfälle, in denen dies nicht der Fall ist. In diesem Artikel werden die Situationen in JavaScript vorgestellt, in denen keine Ereignisse auftreten. 1. Verwenden Sie stopPropagati

See all articles