Heim > Web-Frontend > js-Tutorial > So erstellen Sie benutzerdefinierte Ereignisse in JavaScript

So erstellen Sie benutzerdefinierte Ereignisse in JavaScript

William Shakespeare
Freigeben: 2025-02-25 11:51:14
Original
853 Leute haben es durchsucht

How to Create Custom Events in JavaScript

Kernpunkte

  • JavaScript -Ereignisbehandlung ist die Grundlage aller Client -Anwendungen, sind jedoch mit DOM -Elementen verbunden und sind möglicherweise nicht flexibel genug. JavaScript -benutzerdefinierte Ereignisse lösen dieses Problem und bieten mehr Flexibilität und einfache Wartung.
  • Erstellen von JavaScript -benutzerdefinierten Ereignissen enthält Passereignamen, Details und Optionen in ein neues CustomEvent Objekt. Nach der Erstellung können Sie die dispatchEvent -Methode verwenden, um dieses Ereignis auf ein bestimmtes Element zu versenden.
  • Mehrere Handler können benutzerdefinierte Ereignisse abonnieren, damit verschiedene Aktionen basierend auf der Veranstaltung ausgeführt werden können. Chrome-, Firefox- und Opernunterstützung benutzerdefinierte Ereignisse sowie einige JavaScript -Bibliotheken bieten ebenfalls Unterstützung.

JavaScript -Ereignisbehandlung ist die Grundlage für alle Client -Anwendungen. Wenn ein Ereignis in einem Zielelement auftritt (z. B. Schaltflächenklicks, Mausbewegungen, Formulareinreichungen usw.), wird die Handler -Funktion ausgeführt. Ein Ereignisobjekt wird an den Handler weitergegeben, der verschiedene Eigenschaften und viele Methoden zur Blockierung des Standardvorgangs bietet. Ein Nachteil ist, dass Ereignisse eng mit DOM -Elementen verbunden sind. Betrachten Sie ein einfaches Formular, das Benutzerkommentare akzeptiert:

<label for="msg">你的留言</label><input type="text" id="msg"><button type="submit" form="msgbox">发送</button>
<form id="msgbox"></form>
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir das Formular einreichen, können wir einen Handler schreiben, um die Nachricht auf den Bildschirm wiederzugeben, zum Beispiel:

document.getElementById("msgbox").addEventListener("submit", function(e) {
    e.preventDefault();
    var msg = e.currentTarget.getElementById("msg").value.trim();
    if (msg) {
        alert(msg);
    }
}, false);
Nach dem Login kopieren
Nach dem Login kopieren

Was ist, wenn wir auch eine Nachricht als Tweet senden, sie auf dem Server speichern oder andere Aktionen ausführen möchten? Für die vorhandene Ereignisdelegationsmethode haben wir zwei Optionen:

  1. Fügen Sie mehr Code in vorhandenen Handlern hinzu. Dies ist nicht flexibel genug, da jedes Mal, wenn eine Funktion hinzugefügt, geändert oder gelöscht wird, die Handler -Funktion aktualisiert und getestet werden muss. Gepostete Nachrichten können Dutzende von Verwendungszwecken haben, und wir versuchen, sie alle auf denselben Codeblock anzuwenden.

  2. Erstellen Sie mehr Ereignishandler für jeden Zweck. Dies führt zu einem eleganteren Code, verursacht jedoch Wartungsprobleme. Zunächst muss jede Funktion ähnliche Operationen ausführen, um Nachrichten zu extrahieren und zu überprüfen. Was ist, wenn wir das Formular ändern müssen? Um die ID umzubenennen, muss der Ereignisbearbeitungscode für jeden Abonnenten geändert werden.

Wäre es nicht schön, wenn wir beim Posten einer gültigen Nachricht einfach ein benutzerdefiniertes "NewMessage" -Ereignis auslösen könnten? Es wäre noch besser, wenn wir document oder body Tags überwachen könnten, anstatt bestimmte Formularknoten zu verweisen. Benutzerdefinierte Veranstaltungen ermöglichen es uns, dies zu tun. Das Auslösen eines benutzerdefinierten Ereignisses ist einfach; CustomEvent

In diesem Beispiel ist "NewMessage" der benutzerdefinierte Ereignistyp. Der zweite Parameter ist ein Objekt mit drei Attributen:
var event = new CustomEvent(
    "newMessage", 
    {
        detail: {
            message: "Hello World!",
            time: new Date(),
        },
        bubbles: true,
        cancelable: true
    }
);
Nach dem Login kopieren
Nach dem Login kopieren
  • detail: Ein untergeordnetes Objekt, das benutzerdefinierte Informationen zu Ereignissen liefert. In diesem Beispiel haben wir eine Nachricht und Zeit hinzugefügt.
  • bubbles: Wenn true, wird das Ereignis zum Vorfahren des Elements sprudeln, das das Ereignis ausgelöst hat.
  • cancelable: Wenn es true ist, können Sie die stopPropagation() -Methode des Ereignisobjekts verwenden, um das Ereignis abzusagen.

Jetzt müssen wir dieses Ereignis auf ein bestimmtes Element entsenden, z. B.

<label for="msg">你的留言</label><input type="text" id="msg"><button type="submit" form="msgbox">发送</button>
<form id="msgbox"></form>
Nach dem Login kopieren
Nach dem Login kopieren

Eine beliebige Anzahl von Handlern kann dieses Ereignis mit dem folgenden Code abonnieren:

document.getElementById("msgbox").addEventListener("submit", function(e) {
    e.preventDefault();
    var msg = e.currentTarget.getElementById("msg").value.trim();
    if (msg) {
        alert(msg);
    }
}, false);
Nach dem Login kopieren
Nach dem Login kopieren

Demo -Seite

Dieses Beispiel zeigt die Technik: Custom Event Demo -Seite anzeigen. Der Standard -Event -Handler sucht nach Einreichungen des oben genannten HTML -Formulars. Diese Funktion erhält die aktuelle Nachricht und unter der Annahme, dass sie gültig ist, wird ein neues "NewMessage" -Event versandt.

var event = new CustomEvent(
    "newMessage", 
    {
        detail: {
            message: "Hello World!",
            time: new Date(),
        },
        bubbles: true,
        cancelable: true
    }
);
Nach dem Login kopieren
Nach dem Login kopieren

Der Handler kann jetzt das "NewMessage" -Event abonnieren. Das Ereignis wird nur ausgelöst, wenn eine gültige Nachricht vorhanden ist und da bubbles auf true eingestellt ist, kann das Ereignis auf das Formular oder einen seiner Vorfahren angewendet werden, wie z. B. die Wurzel document, zum Beispiel:

document.getElementById("msgbox").dispatchEvent(event);
Nach dem Login kopieren
Die

Die Nachricht selbst kann aus dem Attribut detail.message des Ereignisobjekts extrahiert werden.

Browserkompatibilität

Zum Zeitpunkt des Schreibens, Chrom-, Firefox- und Opernunterstützungsobjekte CustomEvent Objekte. Es ist in der nächtlichen Version von Safari erhältlich, daher wird es wahrscheinlich bald in diesem Browser erhältlich sein. Dieses Objekt wird in IE9 und unten nicht unterstützt. Glücklicherweise unterstützen mehrere JavaScript-Bibliotheken benutzerdefinierte Ereignisdelegierte. Bleiben Sie also auf dem Laufenden, um bald eine Cross-Browser-Lösung zu erhalten.

(Der FAQS-Teil wird hier weggelassen, weil es nicht mit dem pseudooriginalen Ziel übereinstimmt und zu lang ist.)

Das obige ist der detaillierte Inhalt vonSo erstellen Sie benutzerdefinierte Ereignisse in JavaScript. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage