Inhaltsverzeichnis
Ereignis-Bubbling
Heim Web-Frontend js-Tutorial Detaillierte Einführung in die JavaScript-Ereignisdelegierung (mit Code)

Detaillierte Einführung in die JavaScript-Ereignisdelegierung (mit Code)

Mar 15, 2019 pm 02:23 PM
javascript Veranstaltungsdelegation 前端

Dieser Artikel bietet Ihnen eine detaillierte Einführung in die JavaScript-Ereignisdelegation (mit Code). Freunde in Not können darauf verweisen.

Die Ereignisdelegation (auch als Ereignis-Proxy bezeichnet) verwendet Ereignis-Bubbling, um alle Ereignisse eines bestimmten Typs zu verwalten, indem nur ein Ereignis-Handler angegeben wird.

Es gibt ein sehr anschauliches Beispiel für die „Expresszustellung“ der Ereignisdelegation im Internet. Hier werde ich einige Änderungen und Erweiterungen daran vornehmen und dann das Programm verwenden, um den Mechanismus der Ereignisdelegation zu veranschaulichen.

Es gibt drei Mitarbeiter in einem Unternehmen, und ihre Express-Lieferadresse ist das Unternehmen. Wenn eine Expresslieferung zugestellt wird, ruft der Kurier ihre Nummer an, um sie zu benachrichtigen, und sie holen das Paket ab, nachdem sie es erhalten haben Anruf.

员工ID 员工名称 联系方式
A 111111
B 222222
C 333333
entspricht der Seite, das heißt, jeder Mitarbeiter ist ein Zeichen:
<ul id="前台工作人员">
    <li id="A">员工甲</li>
    <li id="B">员工乙</li>
    <li id="C">员工丙</li>
</ul>
Nach dem Login kopieren

Das Verhalten jedes Mitarbeiters, der ans Telefon geht, um den Kurier abzuholen, ist ein Ereignis. Hier gehen wir davon aus, dass das Verhalten beim Abholen Der Kurier entspricht dem Onclick-Ereignis:

A.onclik = function() {
    收取快递;
};
B.onclick = function() {
    收取快递;
};
C.onclick = function() {
    收取快递;
};
Nach dem Login kopieren

Die obige Implementierung umfasst normalerweise das Durchlaufen jedes Mitarbeiters und das Hinzufügen von Ereignissen zu ihm:

/*程序1*/
var aUl = document.getElemengtByID("前台工作人员");
var aLi = aUl.getElemengtsByTagName("li");
for (var i = 0; i < aLi.length; i++) {
    aLi[i].onclick = function() {
        收取快递;
    }
}
Nach dem Login kopieren

Wie Sie sehen können, wird durch das Festlegen eines Ereignisses für jeden Mitarbeiter ein Ereignis generiert Da der Code redundant ist und Speicher belegt, werden mehrere DOM-Vorgänge (Interaktion mit DOM-Knoten) gleichzeitig ausgeführt, was sich auf die Leistung der Seite auswirkt.

„Die Reduzierung des DOM-Betriebs ist eine der Hauptideen der Leistungsoptimierung“

Also dachten wir natürlich: Warum kann das Personal an der Rezeption nicht für die Expresszustellung für uns unterschreiben?

<ul id="前台工作人员">
    <li id="A">员工甲</li>
    <li id="B">员工乙</li>
    <li id="C">员工丙</li>
</ul>

/*程序2*/
var tel = document.getElementById("前台工作人员");
tel.onclick = function() {
    收取快递;
}
Nach dem Login kopieren

Angenommen, der Kurier ruft zu diesem Zeitpunkt an, um Mitarbeiter A zu benachrichtigen, das Paket abzuholen (onclick), aber der DOM-Knoten

  • von Mitarbeiter A hat kein entsprechendes Ereignis ( onclick), sodass dieses Ereignis zum übergeordneten Element
      „blubbert“ und festgestellt wird, dass
        ein Verarbeitungsereignis onclick hat Das Ereignis wird ausgelöst und die Front-End-Mitarbeiter erhalten eine Expresslieferung.

        Wie Sie sehen, wird auf diese Weise nicht nur die Codemenge reduziert, sondern auch die Anzahl der Interaktionen mit DOM-Knoten.

        Es gibt noch einen weiteren Vorteil: Beim Hinzufügen eines neuen DOM-Knotens wird der Ereigniseffekt des übergeordneten Elements automatisch übernommen. Mit anderen Worten: Wenn ein neuer Mitarbeiter Ding in das Unternehmen kommt, hilft ihm das Personal an der Rezeption direkt beim Abholen der Expresslieferung, ohne dass eine spezielle Veranstaltung für ihn organisiert werden muss.

        Wenn zum Beispiel ein neuer Mitarbeiter Ding zum Unternehmen kommt:

        ...
        <input type="button" id="btn" value="添加新员工">
        ...
        
        ...
        /*程序3*/
        var aBtn = document.getElementById("btn");
        aBtn.onclick = function() {
            var aLi = document.createElement("li");
            oLi.innerHTML = "员工丁";
            aUl.appendChild(aLi);
        }
        ...
        Nach dem Login kopieren

        In einem Programm, das keine Ereignisdelegation verwendet, gibt es kein Ereignis für den neu hinzugefügten Mitarbeiter Ding. Wir müssen Verwenden Sie eine Funktion, um es einzudämmen. Programm 1:

        /*程序4*/
        function pro1() {
            var aUl = document.getElemengtByID("前台工作人员");
            var aLi = aUl.getElemengtsByTagName("li");
            for (var i = 0; i < aLi.length; i++) {
                aLi[i].onclick = function() {
                    收取快递;
                }
            }
        }
        Nach dem Login kopieren

        Führen Sie dann am Ende des Programms diese Funktion aus, die den neuen Mitarbeiter D hinzufügt:

        /*程序5*/
        var aBtn = document.getElementById("btn");
        aBtn.onclick = function() {
            ...
            pro1();
        }
        Nach dem Login kopieren

        Der Nachteil liegt auf der Hand: die Anzahl der Die Interaktionen zwischen DOM-Knoten nehmen exponentiell zu.
        Wenn wir den Ereignisdelegierungsmechanismus verwenden, um dies zu implementieren, besteht dieses Problem nicht. Das Onclick-Ereignis des untergeordneten Elementknotens wird direkt auf dem übergeordneten Elementknoten ausgeführt.

        An diesem Punkt werden wir denken: Für die gleiche Art von Ereignis ist es sehr praktisch, die Ereignisdelegation zu verwenden, um es auf dem übergeordneten Elementknoten zu platzieren. Wenn Sie jedoch unterschiedliche Ereignisse für verschiedene untergeordnete Elementknoten ausführen möchten, können Sie dann trotzdem die Ereignisdelegierung verwenden?

        Die Antwort ist ja.

        Zum Beispiel verwenden die oben genannten drei Mitarbeiter des Unternehmens immer feste Marken für die Expresszustellung:

        • Mitarbeiter A nutzt gerne STO Express, weil es günstig ist und STO nur in den Park liefert Gate;
        • Mitarbeiter B ist JD.com-Mitglied und kauft immer selbst betriebene Produkte von JD.com, und JD.com liefert sie per Expresslieferung nach unten;
        • Mitarbeiter C ist ein SF Express VIP und SF Express liefern sie in die Lobby der Etage, in der sie sich befinden.

        Nachdem die drei den Anruf erhalten hatten, mussten die Mitarbeiter an der Rezeption zu verschiedenen Orten gehen, um die Artikel abzuholen. Für Programme, die keine Ereignisdelegation verwenden, müssen eindeutige Verarbeitungsereignisse festgelegt werden für jede Person:

        var A = document.getElementById("A");
        var B = document.getElementById("B");
        var C = document.getElementById("C");
        
        A.onclick = function() {
            去园区大门取快递;
        }
        B.onclick = function() {
            去楼下取快递;
        }
        C.onclick = function() {
            去本层大厅取快递;
        }
        Nach dem Login kopieren

        erfordert mindestens drei DOM-Operationen und Ereignisfunktionen werden für jeden entsprechenden Knoten festgelegt.

        Und wenn die Ereignisdelegation verwendet wird:

        var aUl = document.getElemengtByID("前台工作人员");
        aUl.onclick = function (ev) {
            var target = ev || window.event; /*兼容浏览器*/
            var target = ev.target || ev.srcElement; /*兼容浏览器*/
            if (target.nodeName.toLocaleLowerCase() == "li") {
                switch(target.id) {
                    case "A" :
                        去园区大门取快递;
                        break;
                    case "B" :
                        去楼下取快递;
                        break;
                    case "C" :
                        去本层大厅取快递;
                        break;
                }
            }
        }
        Nach dem Login kopieren

        Auf diese Weise gibt es nur eine DOM-Operation und andere Operationen werden in JS ausgeführt, was die Leistung der Webseite effektiv verbessern kann.

        Das Obige ist die Grundidee der JS-Ereignisdelegation. Kurz gesagt, die Funktion des Ereignis-Bubblings wird verwendet, um Ereignisse zu verwalten, redundanten Code zu reduzieren, unnötige Erstellungen zu reduzieren und interaktive Vorgänge zu reduzieren, um Speicher zu sparen und die Leistung zu verbessern.

        Ereignis-Bubbling

        Ereignis-Bubbling ist, wenn ein DOM-Elementknoten ausgelöst wird. Wenn der Knoten kein entsprechendes Ereignis hat, prüfen Sie, ob sein übergeordnetes Element ein entsprechendes Ereignis hat. Wenn nicht, prüfen Sie weiter nach oben. Entsprechend ist die Ereigniserfassung

        Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die JavaScript-Ereignisdelegierung (mit Code). 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)

    PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools Mar 16, 2024 pm 12:09 PM

    PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools In der heutigen Zeit der rasanten Entwicklung des Internets ist die Front-End-Entwicklung immer wichtiger geworden. Da Benutzer immer höhere Anforderungen an das Erlebnis von Websites und Anwendungen stellen, müssen Frontend-Entwickler effizientere und flexiblere Tools verwenden, um reaktionsfähige und interaktive Schnittstellen zu erstellen. Als zwei wichtige Technologien im Bereich der Front-End-Entwicklung können PHP und Vue.js in Kombination als perfekte Waffe bezeichnet werden. In diesem Artikel geht es um die Kombination von PHP und Vue sowie um detaillierte Codebeispiele, die den Lesern helfen sollen, diese beiden besser zu verstehen und anzuwenden

    Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

    JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

    Häufig gestellte Fragen von Front-End-Interviewern Häufig gestellte Fragen von Front-End-Interviewern Mar 19, 2024 pm 02:24 PM

    In Front-End-Entwicklungsinterviews decken häufige Fragen ein breites Themenspektrum ab, darunter HTML/CSS-Grundlagen, JavaScript-Grundlagen, Frameworks und Bibliotheken, Projekterfahrung, Algorithmen und Datenstrukturen, Leistungsoptimierung, domänenübergreifende Anfragen, Front-End-Engineering, Designmuster sowie neue Technologien und Trends. Interviewerfragen sollen die technischen Fähigkeiten, die Projekterfahrung und das Verständnis des Kandidaten für Branchentrends beurteilen. Daher sollten Kandidaten in diesen Bereichen umfassend vorbereitet sein, um ihre Fähigkeiten und Fachkenntnisse unter Beweis zu stellen.

    Ist Django Front-End oder Back-End? Hör zu! Ist Django Front-End oder Back-End? Hör zu! Jan 19, 2024 am 08:37 AM

    Django ist ein in Python geschriebenes Webanwendungs-Framework, das Wert auf schnelle Entwicklung und saubere Methoden legt. Obwohl Django ein Web-Framework ist, müssen Sie zur Beantwortung der Frage, ob Django ein Front-End oder ein Back-End ist, ein tiefes Verständnis der Konzepte von Front-End und Back-End haben. Das Front-End bezieht sich auf die Schnittstelle, mit der Benutzer direkt interagieren, und das Back-End bezieht sich auf serverseitige Programme. Sie interagieren mit Daten über das HTTP-Protokoll. Wenn das Front-End und das Back-End getrennt sind, können die Front-End- und Back-End-Programme unabhängig voneinander entwickelt werden, um Geschäftslogik bzw. interaktive Effekte sowie den Datenaustausch zu implementieren.

    Erkundung der Front-End-Technologie der Go-Sprache: eine neue Vision für die Front-End-Entwicklung Erkundung der Front-End-Technologie der Go-Sprache: eine neue Vision für die Front-End-Entwicklung Mar 28, 2024 pm 01:06 PM

    Als schnelle und effiziente Programmiersprache erfreut sich Go im Bereich der Backend-Entwicklung großer Beliebtheit. Allerdings assoziieren nur wenige Menschen die Go-Sprache mit der Front-End-Entwicklung. Tatsächlich kann die Verwendung der Go-Sprache für die Front-End-Entwicklung nicht nur die Effizienz verbessern, sondern Entwicklern auch neue Horizonte eröffnen. In diesem Artikel wird die Möglichkeit der Verwendung der Go-Sprache für die Front-End-Entwicklung untersucht und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis dieses Bereichs zu erleichtern. In der traditionellen Frontend-Entwicklung werden häufig JavaScript, HTML und CSS zum Erstellen von Benutzeroberflächen verwendet

    Django: Ein magisches Framework, das sowohl Front-End- als auch Back-End-Entwicklung bewältigen kann! Django: Ein magisches Framework, das sowohl Front-End- als auch Back-End-Entwicklung bewältigen kann! Jan 19, 2024 am 08:52 AM

    Django: Ein magisches Framework, das sowohl Front-End- als auch Back-End-Entwicklung bewältigen kann! Django ist ein effizientes und skalierbares Webanwendungs-Framework. Es unterstützt mehrere Webentwicklungsmodelle, einschließlich MVC und MTV, und kann problemlos hochwertige Webanwendungen entwickeln. Django unterstützt nicht nur die Back-End-Entwicklung, sondern kann auch schnell Front-End-Schnittstellen erstellen und durch die Vorlagensprache eine flexible Ansichtsanzeige erreichen. Django kombiniert Front-End-Entwicklung und Back-End-Entwicklung zu einer nahtlosen Integration, sodass sich Entwickler nicht auf das Lernen spezialisieren müssen

    Kombination von Golang- und Front-End-Technologie: Entdecken Sie, welche Rolle Golang im Front-End-Bereich spielt Kombination von Golang- und Front-End-Technologie: Entdecken Sie, welche Rolle Golang im Front-End-Bereich spielt Mar 19, 2024 pm 06:15 PM

    Kombination von Golang und Front-End-Technologie: Um zu untersuchen, welche Rolle Golang im Front-End-Bereich spielt, sind spezifische Codebeispiele erforderlich. Mit der rasanten Entwicklung des Internets und mobiler Anwendungen ist die Front-End-Technologie immer wichtiger geworden. Auch in diesem Bereich kann Golang als leistungsstarke Back-End-Programmiersprache eine wichtige Rolle spielen. In diesem Artikel wird untersucht, wie Golang mit Front-End-Technologie kombiniert wird, und sein Potenzial im Front-End-Bereich anhand spezifischer Codebeispiele demonstriert. Die Rolle von Golang im Front-End-Bereich ist effizient, prägnant und leicht zu erlernen

    So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

    Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

    See all articles