jQuery-Ereignisbindung und Delegate examples_jquery
Die Beispiele in diesem Artikel beschreiben die Bindung und Delegation von jQuery-Ereignissen. Teilen Sie es als Referenz mit allen. Die spezifische Methode ist wie folgt:
JQuery-Ereignisbindung und -Delegierung kann mit einer Vielzahl von Methoden implementiert werden: on() , bind() , live() , delegate() und one().
Manchmal binden wir ein Ereignis wie dieses:
warning("Trigger after click");
});
Wir können die obige Ereignisbindung auf verschiedene Arten implementieren:
1. am()
$("p").on("click", function(){
alarm( $(this).text() ); });
//Es gibt Datenparameter
Funktion myHandler(event) {
Alert(event.data.foo);
}
$("p").on("click", {foo: "bar"}, myHandler)
};
// ... jetzt wird foo aufgerufen, wenn auf Absätze geklickt wird ...
$("body").on("click", "p", foo);
// ... foo wird nicht mehr aufgerufen $("body").off("click", "p", foo);
off(): Entfernen Sie die Bindung durch on()
2. bind()
Parameter:
(Typ,[Daten],Funktion(Ereignisobjekt))
data: Zusätzliches Datenobjekt, das als event.data-Attributwert
an das Ereignisobjekt übergeben wird
fn: Die Handlerfunktion, die an das Ereignis jedes übereinstimmenden Elements
gebunden ist
(Typ,[Daten],false)
Typ: Eine Zeichenfolge, die einen oder mehrere Ereignistypen enthält, wobei mehrere Ereignisse durch Leerzeichen getrennt sind. Zum Beispiel „Klicken“ oder „Senden“ oder ein benutzerdefinierter Ereignisname.
data: Zusätzliches Datenobjekt, das als event.data-Attributwert
an das Ereignisobjekt übergeben wird
false: Wenn Sie den dritten Parameter auf false setzen, wird die Standardaktion deaktiviert.
Mehrere Ereignistypen gleichzeitig binden:
Mehrere Ereignistypen/Handler gleichzeitig binden:
});
Sie können vor der Ereignisbehandlung einige zusätzliche Daten übergeben.
Probleme mit der Bindung
Wenn die Tabelle 10 Spalten und 500 Zeilen enthält, an die Klickereignisse gebunden sind, führt das Suchen und Durchlaufen von 5000 Zellen zu einer erheblichen Verlangsamung der Skriptausführungsgeschwindigkeit, und das Speichern von 5000 td-Elementen und entsprechenden Ereignishandlern dauert ebenfalls Es wird viel Speicher benötigt (ähnlich wie wenn alle physisch an der Tür stehen und auf eine Lieferung warten).
Wenn wir basierend auf dem vorherigen Beispiel eine einfache Fotoalbumanwendung implementieren möchten, werden auf jeder Seite nur Miniaturansichten von 50 Fotos (50 Zellen) angezeigt, und der Benutzer kann auf den Link „Seite x“ (oder „Nächste Seite“) klicken Laden Sie weitere 50 Fotos dynamisch über Ajax vom Server. In diesem Fall scheint das Binden von Ereignissen für 50 Zellen mithilfe der Methode .bind() wieder akzeptabel zu sein.
Das ist nicht der Fall. Durch die Verwendung der Methode .bind() werden Klickereignisse nur an 50 Zellen auf der ersten Seite gebunden. Zellen in nachfolgenden Seiten, die dynamisch geladen werden, verfügen nicht über dieses Klickereignis. Mit anderen Worten: .bind() kann Ereignisse nur an Elemente binden, die zum Zeitpunkt des Aufrufs bereits vorhanden sind, und keine Ereignisse an Elemente binden, die in der Zukunft hinzugefügt werden (ähnlich wie neue Mitarbeiter keine Expresszustellung erhalten können).
Die Veranstaltungsdelegation kann die beiden oben genannten Probleme lösen. Verwenden Sie speziell für den Code einfach die in jQuery 1.3 neu hinzugefügte Methode .live() anstelle der Methode .bind():
Die .live()-Methode bindet hier das Klickereignis an das $(document)-Objekt (dies kann jedoch nicht im Code widergespiegelt werden). Dies ist auch ein wichtiger Grund, warum die .live()-Methode kritisiert wurde. Wir werden darüber diskutieren im Detail später), und Sie müssen $(document) nur einmal binden (nicht 50 Mal, geschweige denn 5000 Mal), und dann können Sie das Klickereignis der nachfolgenden dynamisch geladenen Fotozelle verarbeiten. Beim Empfang eines Ereignisses überprüft das Objekt $(document) den Ereignistyp und das Ereignisziel. Wenn es sich um ein Klickereignis handelt und das Ereignisziel td ist, wird der an es delegierte Handler ausgeführt.
unbind(): Entfernt die von bind durchgeführte Bindung.
3. live()
Bisher scheint alles perfekt zu sein. Leider ist dies nicht der Fall. Da die .live()-Methode nicht perfekt ist, weist sie die folgenden großen Mängel auf:
Die Funktion $() findet alle td-Elemente auf der aktuellen Seite und erstellt jQuery-Objekte. Diese td-Elementsammlung wird jedoch nicht zum Bestätigen des Ereignisziels verwendet. Stattdessen wird ein Selektorausdruck zum Vergleich mit event.target oder seinem Vorfahren verwendet Elemente, daher verursacht das Generieren dieses jQuery-Objekts unnötigen Overhead;
Standardmäßig sind Ereignisse an das Element $(document) gebunden. Wenn die verschachtelte DOM-Struktur sehr tief ist, führen Ereignisse, die durch eine große Anzahl von Vorgängerelementen sprudeln, zu Leistungseinbußen
Es kann nur nach dem direkt ausgewählten Element platziert werden und kann nicht nach der aufeinanderfolgenden DOM-Traversal-Methode verwendet werden, d. h. $("#info_table td").live... kann verwendet werden, aber $("#info_table") .find("td" ).live...Nein;
Sammeln Sie td-Elemente und erstellen Sie jQuery-Objekte, aber die eigentliche Operation ist das $(document)-Objekt, was rätselhaft ist.
Die Lösung
Um die Generierung unnötiger jQuery-Objekte zu vermeiden, können Sie einen Hack namens „early delegation“ verwenden, der darin besteht, .live() außerhalb der Methode $(document).ready() aufzurufen:
Um Leistungseinbußen durch Event-Bubbling zu vermeiden, unterstützt jQuery ab 1.4 die Verwendung eines Kontextparameters bei Verwendung der .live()-Methode:
Auf diese Weise ändert sich der „Treuhänder“ vom Standardwert $(document) zu $("#info_table")[0], wodurch die Blasenfahrt vermieden wird. Der mit .live() verwendete Kontextparameter muss jedoch ein separates DOM-Element sein, daher wird das Kontextobjekt hier mit $("#info_table")[0] angegeben, das mit dem Array-Index-Operator abgerufen wird.
4. Delegate()
Wie bereits erwähnt, führte jQuery 1.3 die Methode .live() ein, um die Einschränkungen der einzelnen .bind()-Methode zu überwinden und die Ereignisdelegation zu implementieren. Um das Problem einer zu langen „Ereignisausbreitungskette“ zu lösen, unterstützte jQuery 1.4 später die Angabe von Kontextobjekten für die .live()-Methode. Um das Problem der unnötigen Generierung von Elementsammlungen zu lösen, hat jQuery 1.4.2 einfach eine neue Methode.delegate() eingeführt.
Mit .delegate() kann das vorherige Beispiel wie folgt geschrieben werden:
Die Verwendung von .delegate() hat die folgenden Vorteile (oder löst die folgenden Probleme der .live()-Methode):
Binden Sie den Zielelementselektor („td“), das Ereignis („click“) und den Handler direkt an den „Dragee“ $ („#info_table“), ohne zusätzliche Sammlung von Elementen, verkürzten Ereignisausbreitungspfad und klare Semantik; >
Es ist ersichtlich, dass die Methode .delegate() eine relativ perfekte Lösung ist. Wenn die DOM-Struktur jedoch einfach ist, kann auch .live() verwendet werden.
Tipp: Wenn Sie die Ereignisdelegierung verwenden und andere im Zielelement registrierte Ereignishandler .stopPropagation() verwenden, um die Ereignisweitergabe zu verhindern, wird die Ereignisdelegierung ungültig.
undelegate(): Entfernen Sie die Bindung von Delegate
Ich hoffe, dass dieser Artikel für alle bei der jQuery-Programmierung hilfreich sein wird.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MetaMask (auf Chinesisch auch Little Fox Wallet genannt) ist eine kostenlose und beliebte Verschlüsselungs-Wallet-Software. Derzeit unterstützt BTCC die Bindung an die MetaMask-Wallet. Nach der Bindung können Sie sich mit der MetaMask-Wallet schnell anmelden, Werte speichern, Münzen kaufen usw. und bei der erstmaligen Bindung einen Testbonus von 20 USDT erhalten. Im BTCCMetaMask-Wallet-Tutorial stellen wir detailliert vor, wie man MetaMask registriert und verwendet und wie man das Little Fox-Wallet in BTCC bindet und verwendet. Was ist die MetaMask-Wallet? Mit über 30 Millionen Nutzern ist MetaMask Little Fox Wallet heute eines der beliebtesten Kryptowährungs-Wallets. Die Nutzung ist kostenlos und kann als Erweiterung im Netzwerk installiert werden

Im heutigen Zeitalter der Informationsexplosion wird der Aufbau einer persönlichen Marke und eines Unternehmensimages immer wichtiger. Als führende Fashion-Life-Sharing-Plattform in China hat Xiaohongshu die Aufmerksamkeit und Beteiligung vieler Nutzer auf sich gezogen. Für diejenigen Nutzer, die ihren Einfluss erweitern und die Effizienz der Inhaltsverbreitung verbessern möchten, ist die Bindung von Unterkonten ein wirksames Mittel geworden. Wie bindet Xiaohongshu also ein Unterkonto? Wie kann ich überprüfen, ob das Konto normal ist? Dieser Artikel beantwortet diese Fragen ausführlich für Sie. 1. Wie binde ich ein Unterkonto auf Xiaohongshu? 1. Melden Sie sich bei Ihrem Hauptkonto an: Zuerst müssen Sie sich bei Ihrem Xiaohongshu-Hauptkonto anmelden. 2. Öffnen Sie das Einstellungsmenü: Klicken Sie oben rechts auf „Ich“ und wählen Sie dann „Einstellungen“. 3. Geben Sie die Kontoverwaltung ein: Suchen Sie im Einstellungsmenü nach der Option „Kontoverwaltung“ oder „Kontoassistent“ und klicken Sie darauf

1. Öffnen Sie Toutiao. 2. Klicken Sie unten rechts auf „Mein“. 3. Klicken Sie auf [Systemeinstellungen]. 4. Klicken Sie auf [Konto- und Datenschutzeinstellungen]. 5. Klicken Sie auf die Schaltfläche auf der rechten Seite von [Douyin], um Douyin zu binden.

Die Cainiao-App ist eine Plattform, die Ihnen verschiedene Logistikinformationen liefern kann. Die Funktionen hier sind sehr leistungsstark und einfach zu verwenden. Wenn Sie logistische Probleme haben, können diese auf jeden Fall gelöst werden -Stopp-Service kann alles rechtzeitig lösen, die Expresslieferung abholen, versenden usw. Wir haben mit verschiedenen Plattformen zusammengearbeitet und können manchmal abgefragt werden Es kann vorkommen, dass die auf Pinduoduo gekauften Waren keine Logistikinformationen anzeigen können. Um dies zu erreichen, müssen Sie die spezifischen Methoden unten klären, und jeder kann einen Blick darauf werfen. So binden Sie Cainiao an ein Pinduoduo-Konto: 1. Öffnen Sie die Cainiao-App und gehen Sie zur Hauptseite

Wie verwende ich die PUT-Anfragemethode in jQuery? In jQuery ähnelt die Methode zum Senden einer PUT-Anfrage dem Senden anderer Arten von Anfragen, Sie müssen jedoch auf einige Details und Parametereinstellungen achten. PUT-Anfragen werden normalerweise zum Aktualisieren von Ressourcen verwendet, beispielsweise zum Aktualisieren von Daten in einer Datenbank oder zum Aktualisieren von Dateien auf dem Server. Das Folgende ist ein spezifisches Codebeispiel, das die PUT-Anforderungsmethode in jQuery verwendet. Stellen Sie zunächst sicher, dass Sie die jQuery-Bibliotheksdatei einschließen. Anschließend können Sie eine PUT-Anfrage senden über: $.ajax({u

Das neueste von Xiaomi auf den Markt gebrachte Modellauto Mi su7 hat verschiedene heiße Suchlisten dominiert. Viele Benutzer, die zufällig ein Auto kaufen möchten, haben sich für den Kauf eines Modellautos Xiaomi su7 entschieden Wenn Sie sich dazu entschließen, eine Ladesäule zu Hause zum Aufladen zu verwenden, wird Ihnen dieses Tutorial eine ausführliche Einführung geben. Ich hoffe, es kann Ihnen helfen. Zuerst öffnen wir die mobile Xiaomi-App, klicken auf die Schaltfläche „Mein“ in der unteren rechten Ecke und sehen dann in der Benutzeroberfläche „Mein“ die Option „Heimladestapel“. Klicken Sie nach dem Aufrufen der Seite, die den Ladestapel bindet, auf den Scancode Klicken Sie unten auf die Schaltfläche und scannen Sie den QR-Code auf der Ladesäule. Mit dem QR-Code können Sie die Ladesäule an die App binden.

Wissen Sie, wie Sie Pinduoduo binden, wenn Sie Cainiao Wrap verwenden? Die offizielle Version der Cainiao Wrap-App synchronisiert einige Logistikinformationen von Pinduoduo nicht automatisch auf dieser Plattform. Sie können lediglich die Bestellnummer kopieren oder Ihr Mobiltelefon überprüfen wenn es Expressversandinformationen gibt. Natürlich müssen diese alle manuell ausgefüllt werden. Wenn Sie mehr wissen möchten, schauen Sie sich den Editor an. So binden Sie die Cainiao-APP an Pinduoduo 1. Öffnen Sie die Cainiao-APP und klicken Sie auf „Paketanleitung“ in der oberen linken Ecke der Hauptseite. 2. In der Benutzeroberfläche gibt es viele Shopping-Websites und Konten können gebunden werden. 3. Klicken Sie, um andere E-Commerce-Plattformen zu importieren. 4. Benutzerautorisierung: Klicken Sie auf Pinduoduo, um zur Benutzeroberfläche zu gelangen

Dass die Black Box keine Verbindung zu Steam herstellen kann, kann durch Netzwerk- oder Softwareversionsprobleme verursacht werden. Die kleine Blackbox bietet Informationen, darunter Preise für veröffentlichte und kommende Spiele, Anforderungen und Rezensionen zur Computerkonfiguration sowie eine ausführliche Gameplay-Analyse. Darüber hinaus können Benutzer jederzeit und überall die benötigten Informationen über mobile Geräte finden. Was tun, wenn die kleine Blackbox nicht mit Steam verbunden werden kann? 1. Bestätigen Sie den Netzwerkstatus und stellen Sie sicher, dass das Gerät mit dem Internet verbunden ist. 2. Überprüfen Sie die Little Black Box-Version. Stellen Sie sicher, dass Sie die neueste Version der Little Black Box-Software verwenden, und versuchen Sie, Ihr Steam-Konto zu binden. 3. Um die Steam-Kontoeinstellungen zu überprüfen, melden Sie sich bitte beim Steam-Konto an und prüfen Sie, ob die Funktion zur Bindung von Drittanbietersoftware in den Datenschutzeinstellungen aktiviert ist. 4. Wenden Sie sich an den offiziellen Kundendienst. Wenn das Problem mit den oben genannten Schritten immer noch nicht gelöst werden kann, wird empfohlen, dass Sie sich an den offiziellen Kundendienst wenden, um Hilfe zu erhalten.
