Heim Web-Frontend js-Tutorial Eine kurze Analyse des Inhalts zwischen js-Ereignisbindung, Ereignisüberwachung und Ereignisdelegation

Eine kurze Analyse des Inhalts zwischen js-Ereignisbindung, Ereignisüberwachung und Ereignisdelegation

Aug 23, 2018 pm 03:01 PM
Veranstaltungsdelegation 事件监听 事件绑定

Der Inhalt dieses Artikels ist eine kurze Analyse der js-Ereignisbindung und -Überwachung und -Delegierung. Ich hoffe, dass er Ihnen weiterhilft.

1. Ereignisbindung
Damit JavaScript auf Benutzeroperationen reagiert, müssen Sie zunächst Ereignisverarbeitungsfunktionen an DOM-Elemente binden. Die sogenannte Ereignisverarbeitungsfunktion ist eine Funktion, die Benutzeroperationen verarbeitet, die unterschiedlichen Namen entsprechen.
Es gibt drei häufig verwendete Methoden zum Binden von Ereignissen:
(1) Binden Sie Ereignisse direkt im DOM
Wir können das Binden per Klick auf das DOM-Element oder per Mouseover durchführen , onmouseout, onmousedown, onmouseup, ondblclick, onkeydown, onkeypress, onkeyup usw.

<input type="button" value="click me" onclick="hello()"><script>
function hello(){
    alert("hello world!");
}
</script>
Nach dem Login kopieren

(2) Bindungsereignisse im JavaScript-Code
Bindungsereignisse im JavaScript-Code (d. h. innerhalb von Skript-Tags) können JavaScript-Code von HTML-Tags und der Dokumentstruktur trennen. Klar und einfach zu verwalten und entwickeln.

<input type="button" value="click me" id="btn"><script>
document.getElementById("btn").onclick = function(){
    alert("hello world!");
}
</script>
Nach dem Login kopieren

(3) Verwenden Sie die Ereignisüberwachung, um Ereignisse zu binden.
Eine andere Möglichkeit, Ereignisse zu binden, besteht darin, addEventListener() oder attachmentEvent() zu verwenden, um die Ereignisüberwachungsfunktion zu binden.
Ereignisüberwachung
In Bezug auf die Ereignisüberwachung definiert die W3C-Spezifikation drei Ereignisphasen: die Erfassungsphase, die Zielphase und die Bubbling-Phase.
W3C-Spezifikation

element.addEventListener(event, function, useCapture)
Nach dem Login kopieren

Ereignis: (erforderlicher) Ereignisname, unterstützt alle DOM-Ereignisse.
Funktion: (erforderlich) Gibt die Funktion an, die ausgeführt werden soll, wenn das Ereignis ausgelöst wird.
useCapture: (optional) Gibt an, ob das Ereignis in der Capture- oder Bubbling-Phase ausgeführt wird. wahr, erfassen. falsch, Blase. Der Standardwert ist falsch.

<input type="button" value="click me" id="btn1"><script>
document.getElementById("btn1").addEventListener("click",hello);
function hello(){
    alert("hello world!");
}
</script>
Nach dem Login kopieren

IE-Standard

element.attachEvent(event, function)
Nach dem Login kopieren

Ereignis: (erforderlicher) Ereignistyp. Es muss „on“ hinzugefügt werden, zum Beispiel: onclick.
Funktion: (erforderlich) Gibt die Funktion an, die ausgeführt werden soll, wenn das Ereignis ausgelöst wird.

<input type="button" value="click me" id="btn2"><script>
document.getElementById("btn2").attachEvent("onclick",hello);
function hello(){
    alert("hello world!");
}
</script>
Nach dem Login kopieren

Vorteile der Ereignisüberwachung
1. Es können mehrere Ereignisse gebunden werden.
Bei der regulären Ereignisbindung wird nur das letzte gebundene Ereignis ausgeführt. Der Event-Listener kann mehrere Funktionen ausführen.

<input type="button" value="click me" id="btn4"><script>
var btn4 = document.getElementById("btn4");
btn4.addEventListener("click",hello1);
btn4.addEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Nach dem Login kopieren

2. Sie können die entsprechende

<input type="button" value="click me" id="btn5"><script>
var btn5 = document.getElementById("btn5");
btn5.addEventListener("click",hello1);//执行了
btn5.addEventListener("click",hello2);//不执行
btn5.removeEventListener("click",hello2);
function hello1(){
    alert("hello 1");
}
function hello2(){
    alert("hello 2");
}
</script>
Nach dem Login kopieren

Gekapselte Ereignisüberwachung

<input type="button" value="click me" id="btn5">//绑定监听事件
function addEventHandler(target,type,fn){
    if(target.addEventListener){
        target.addEventListener(type,fn);
    }else{
        target.attachEvent("on"+type,fn);
    }
}//移除监听事件
function removeEventHandler(target,type,fn){
    if(target.removeEventListener){
        target.removeEventListener(type,fn);
    }else{
        target.detachEvent("on"+type,fn);
    }
}
Nach dem Login kopieren

Ereigniserfassung aufheben: Ereigniserfassungszeiger ist Vom Dokument zum Knoten, der das Ereignis auslöst, also von oben nach unten, um das Ereignis auszulösen.
Event-Bubbling: löst Ereignisse von unten nach oben aus. Der dritte Parameter der gebundenen Ereignismethode besteht darin, zu steuern, ob die Ereignisauslösesequenz eine Ereigniserfassung ist. wahr, Ereigniserfassung; falsch, Ereignissprudeln. Der Standardwert ist „false“, was bedeutet, dass das Ereignis sprudelt.

<p id="parent">
  <p id="child" class="child"></p>
</p>

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+this.id);
            })
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+this.id)
            })

child事件被触发,child
parent事件被触发,parent
Nach dem Login kopieren

Fazit: Erst Kind, dann Eltern. Ereignisse werden der Reihe nach von innen nach außen ausgelöst, was als Event-Bubbling bezeichnet wird.
Ändern Sie nun den Wert des dritten Parameters auf true:

document.getElementById("parent").addEventListener("click",function(e){
                alert("parent事件被触发,"+e.target.id);
            },true)
            document.getElementById("child").addEventListener("click",function(e){
                alert("child事件被触发,"+e.target.id)
            },true)parent事件被触发,parentchild事件被触发,child
Nach dem Login kopieren

Schlussfolgerung: zuerst Elternteil, dann Kind. Die Reihenfolge der Ereignisauslösung wird von außen nach innen geändert, was der Ereigniserfassung entspricht.

Verhindern Sie, dass Ereignisse sprudeln, und verhindern Sie Standardereignisse:
event.stopPropagation()-Methode: Dies ist eine Methode, um zu verhindern, dass Ereignisse sprudeln und Ereignisse nicht auftreten Wenn Sie diese Methode verwenden und auf eine Verbindung klicken, wird die Verbindung weiterhin geöffnet.
event.preventDefault()-Methode: Dies ist eine Methode zum Verhindern des Standardereignisses. Wenn diese Methode aufgerufen wird, wird die Verbindung nicht geöffnet, aber es kommt zu einer Blasenbildung, und die Blasenbildung wird weitergeleitet zur oberen Ebene.
false zurückgeben: Diese Methode verhindert das Sprudeln von Ereignissen und verhindert Standardereignisse wird nicht an das übergeordnete Element einer Ebene übergeben; es kann verstanden werden, dass die Rückgabe von „false“ dem gleichzeitigen Aufruf von event.stopPropagation() und event.preventDefault() entspricht > 2. Ereignisdelegation

Ereignisdelegierung soll verwendet werden Das Prinzip des Sprudelns besteht darin, Ereignisse zu übergeordneten Elementen oder Vorfahrenelementen hinzuzufügen, um Ausführungseffekte auszulösen.

<input type="button" value="click me" id="btn6">
var btn6 = document.getElementById("btn6");
document.onclick = function(event){    
event = event || window.event;    
var target = event.target || event.srcElement;    
if(target == btn6){
        alert(btn5.value);
    }
}
Nach dem Login kopieren

Vorteile der Ereignisdelegierung

1. Verbessern Sie die JavaScript-Leistung. Die Ereignisdelegierung kann die Geschwindigkeit der Ereignisverarbeitung erheblich verbessern und die Speichernutzung reduzieren

<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>
  var item1 = document.getElementById("item1");
  var item2 = document.getElementById("item2");
  var item3 = document.getElementById("item3");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target == item1){
        alert("hello item1");
    }else if(target == item2){
        alert("hello item2");
    }else if(target == item3){
        alert("hello item3");
    }
})</script>
Nach dem Login kopieren
2. Fügen Sie DOM-Elemente dynamisch hinzu, ohne Ereignisbindungen aufgrund von Elementänderungen zu ändern.
<ul id="list">
  <li id="item1" >item1</li>
  <li id="item2" >item2</li>
  <li id="item3" >item3</li></ul><script>var list = document.getElementById("list");

document.addEventListener("click",function(event){
    var target = event.target;    
    if(target.nodeName == "LI"){
        alert(target.innerHTML);
    }
})
var node=document.createElement("li");
var textnode=document.createTextNode("item4");
node.appendChild(textnode);
list.appendChild(node);
</script>
Nach dem Login kopieren
Verwandte Empfehlungen:

Eine kurze Diskussion über das on()-Bindungsereignis und das off()-Entbindungsereignis von jquery


Eine kurze Diskussion über gängige Methoden der JavaScript-Ereignisbindung und Analyse ihrer Vor- und Nachteile

Das obige ist der detaillierte Inhalt vonEine kurze Analyse des Inhalts zwischen js-Ereignisbindung, Ereignisüberwachung und Ereignisdelegation. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Wie viele Möglichkeiten gibt es, Ereignisse in JQuery zu binden? Wie viele Möglichkeiten gibt es, Ereignisse in JQuery zu binden? Nov 09, 2020 pm 03:30 PM

Es gibt vier Möglichkeiten, Ereignisse in jquery zu binden: die Methoden bind(), live(), delegate() und on(). Die Methode bind() kann Ereignisse nur an vorhandene Elemente binden, während die Methode live() on () und Delegate() unterstützen alle die Ereignisbindung für neu hinzugefügte Elemente in der Zukunft.

Lösen Sie das Problem des UniApp-Fehlers: Das Ereignis „xxx' ist nicht gebunden Lösen Sie das Problem des UniApp-Fehlers: Das Ereignis „xxx' ist nicht gebunden Nov 25, 2023 am 10:56 AM

Beim Entwickeln von Anwendungen mit UniApp kann die folgende Fehlermeldung angezeigt werden: „xxx“-Ereignis ist nicht gebunden. Dies wird durch den Ereignisbindungsmechanismus von UniApp verursacht, der zur Lösung dieses Problems richtig eingestellt werden muss. 1. Ursache des Problems In UniApp wird die Ereignisbindung von Seitenkomponenten über die v-on-Anweisung abgeschlossen. Fügen Sie der Vorlage beispielsweise eine Schaltflächenkomponente hinzu: &lt;button@click="onClick"&gt;Click Me&lt;/butto

So verhindern Sie wirksam, dass Ereignisse übersprudeln So verhindern Sie wirksam, dass Ereignisse übersprudeln Feb 19, 2024 pm 08:25 PM

Um das Blasen von Ereignissen effektiv zu verhindern, sind bestimmte Codebeispiele erforderlich. Wenn ein Ereignis für ein Element ausgelöst wird, erhält das übergeordnete Element manchmal Probleme bei der Webentwicklung Wir müssen lernen, wie wir effektiv verhindern können, dass sich Ereignisse aufblähen. In JavaScript können wir verhindern, dass ein Ereignis sprudelt, indem wir die Methode stopPropagation() des Ereignisobjekts verwenden. Diese Methode kann innerhalb eines Ereignishandlers aufgerufen werden, um die Weitergabe des Ereignisses an das übergeordnete Element zu verhindern.

Implementieren Sie die Funktion zur Überwachung von Kartenereignissen mithilfe von JavaScript und Tencent Maps Implementieren Sie die Funktion zur Überwachung von Kartenereignissen mithilfe von JavaScript und Tencent Maps Nov 21, 2023 pm 04:10 PM

Leider kann ich Ihnen kein vollständiges Codebeispiel zur Verfügung stellen. Ich kann Ihnen jedoch eine Grundidee und einen Beispielcodeausschnitt als Referenz zur Verfügung stellen. Das Folgende ist ein einfaches Beispiel für die Kombination von JavaScript und Tencent Map zur Implementierung der Kartenereignisüberwachungsfunktion: //Einführung in die API von Tencent Map constscript=document.createElement('script');script.src='https://map.

Wie füge ich Ereignisse zu Elementen hinzu? Drei Möglichkeiten zum Parsen von JS-Bindungsereignissen Wie füge ich Ereignisse zu Elementen hinzu? Drei Möglichkeiten zum Parsen von JS-Bindungsereignissen Aug 04, 2022 pm 07:27 PM

Als Skriptsprache kann JavaScript Ereignisse an Elemente auf der Seite binden, sodass beim Eintreten eines bestimmten Ereignisses automatisch der entsprechende Ereignishandler aufgerufen werden kann, um das Ereignis zu verarbeiten. Wie fügt man also Ereignisse zu Elementen hinzu? Der folgende Artikel stellt Ihnen drei Möglichkeiten vor, Ereignisse in JS zu binden. Ich hoffe, er wird Ihnen hilfreich sein!

Welche Funktion hat das JQuery-Bindungsereignis? Welche Funktion hat das JQuery-Bindungsereignis? Mar 20, 2023 am 10:52 AM

Die Funktion des Jquery-Bindungsereignisses: Binden Sie gewöhnliche Ereignisse an DOM-Knoten. Wenn der DOM-Knoten ausgewählt ist, binden Sie das Ereignis daran, um Benutzern die Bereitstellung entsprechender Vorgänge zu erleichtern. jQuery bietet vier Ereignisbindungsmethoden, nämlich bind, live, Delegate und on, und die entsprechenden nicht abhörenden Funktionen sind unbind, die, undelegate und off.

Eine ausführliche Diskussion der jQuery-Ereignisbindungstechnologie Eine ausführliche Diskussion der jQuery-Ereignisbindungstechnologie Feb 26, 2024 pm 07:36 PM

jQuery ist eine beliebte JavaScript-Bibliothek, die häufig für die Interaktivität auf Webseiten verwendet wird. Unter diesen ist die Ereignisbindung eine der wichtigen Funktionen von jQuery, mit der die Ereignisbindung eine Reaktion auf Benutzerinteraktionen realisieren kann. In diesem Artikel wird die jQuery-Ereignisbindungstechnologie untersucht und spezifische Codebeispiele gegeben. 1. Das Grundkonzept der Ereignisbindung. Unter Ereignisbindung versteht man das Hinzufügen eines Ereignis-Listeners zu einem DOM-Element, um bestimmte Vorgänge auszuführen, wenn ein bestimmtes Ereignis auftritt. Wählen Sie in jQuery das gewünschte aus

Wie implementiert man die Ereignisüberwachung in anonymen inneren Java-Klassen? Wie implementiert man die Ereignisüberwachung in anonymen inneren Java-Klassen? May 02, 2024 pm 12:24 PM

Zur Implementierung der Ereignisüberwachung werden anonyme innere Klassen verwendet, wodurch die Erstellung separater Klassendateien überflüssig wird und der Prozess vereinfacht wird. Die Syntax lautet: new{//Implementieren Sie die in der Schnittstelle deklarierte Methode}. Beispielsweise kann in der Button-Klasse das Hinzufügen eines ActionListener-Listeners durch eine anonyme innere Klasse erreicht werden, deren actionPerformed-Methode eine Nachricht ausgibt, wenn auf die Schaltfläche geklickt wird. Es vereinfacht den Code und verbessert die Lesbarkeit, greift jedoch nur auf lokale Variablen zu und verfügt über keine Konstruktoren oder Felder.

See all articles