Heim Web-Frontend js-Tutorial jQuery-Ereignisbindung und Delegate examples_jquery

jQuery-Ereignisbindung und Delegate examples_jquery

May 16, 2016 pm 04:30 PM
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:

Code kopieren Der Code lautet wie folgt:
$("#div1").click(function() {
warning("Trigger after click");
});

Wir können die obige Ereignisbindung auf verschiedene Arten implementieren:

1. am()

Code kopieren Der Code lautet wie folgt:
//Keine Datenparameter
$("p").on("click", function(){
alarm( $(this).text() ); });

//Es gibt Datenparameter
Funktion myHandler(event) {
Alert(event.data.foo);
}
$("p").on("click", {foo: "bar"}, myHandler)
Entsprechend on() ist off(), das zum Entfernen der Ereignisbindung verwendet wird:


Code kopieren Der Code lautet wie folgt:
var foo = function () {
// Code zur Behandlung einer Art Ereignis
};
// ... 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()
one(): nur einmal binden.


2. bind()

Parameter: (Typ,[Daten],Funktion(Ereignisobjekt))

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
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:



Code kopieren Der Code lautet wie folgt:$('#foo').bind('mouseenter mouseleave', function() { $(this).toggleClass('entered');
});


Mehrere Ereignistypen/Handler gleichzeitig binden:


Code kopieren Der Code lautet wie folgt:$("button").bind({ click:function(){$("p").slideToggle();},
mouseover:function(){$("body").css("background-color",red");},
mouseout:function(){$("body").css("background-color","#FFFFFF");}
});


Sie können vor der Ereignisbehandlung einige zusätzliche Daten übergeben.


Code kopieren Der Code lautet wie folgt:Funktionshandler (Ereignis) { Alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)


Brechen Sie das Standardverhalten ab und verhindern Sie, dass das Ereignis sprudelt, indem Sie „false“ zurückgeben.



Code kopieren Der Code lautet wie folgt:$("form").bind("submit", function( ) { return false; })

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():

Code kopieren Der Code lautet wie folgt:
$("#info_table td").live("click", function() {/*Mehr Informationen anzeigen*/});

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:


Code kopieren Der Code lautet wie folgt:(function($){
$("#info_table td").live("click",function(){/*Mehr Informationen anzeigen*/});
})(jQuery);

Hier ist (function($){...})(jQuery) eine „anonyme Funktion, die sofort ausgeführt wird“ und einen Abschluss bildet, um Namenskonflikte zu vermeiden. Innerhalb der anonymen Funktion verweist der $parameter auf das jQuery-Objekt. Diese anonyme Funktion wartet nicht, bis das DOM bereit ist, bevor sie ausgeführt wird. Beachten Sie, dass bei Verwendung dieses Hacks das Skript im Head-Element der Seite verlinkt und/oder ausgeführt werden muss. Der Grund für die Wahl dieses Zeitpunkts besteht darin, dass das Dokumentelement zu diesem Zeitpunkt verfügbar ist und das gesamte DOM noch lange nicht generiert ist. Wenn das Skript vor dem schließenden Body-Tag platziert wird, macht es keinen Sinn, da das DOM vollständig ist zu diesem Zeitpunkt verfügbar.

Um Leistungseinbußen durch Event-Bubbling zu vermeiden, unterstützt jQuery ab 1.4 die Verwendung eines Kontextparameters bei Verwendung der .live()-Methode:


Code kopieren Der Code lautet wie folgt:$("td",$("#info_table")[0 ]). live("click",function(){/*Mehr Informationen anzeigen*/});

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:

Code kopieren Der Code lautet wie folgt:
$("#info_table").delegate("td"," click", function(){/*Mehr Informationen anzeigen*/});

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; >

Unterstützt den Aufruf nach verketteten DOM-Traversal-Methoden, d. h. unterstützt $("table").find("#info").delegate... und unterstützt eine präzise Steuerung;

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.

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)

BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? BTCC-Tutorial: Wie kann ich die MetaMask-Wallet an der BTCC-Börse binden und verwenden? Apr 26, 2024 am 09:40 AM

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

Wie binde ich ein Unterkonto auf Xiaohongshu? Wie prüft es, ob das Konto normal ist? Wie binde ich ein Unterkonto auf Xiaohongshu? Wie prüft es, ob das Konto normal ist? Mar 21, 2024 pm 10:11 PM

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

Schritte und Methoden, um Douyin in Toutiao zu binden Schritte und Methoden, um Douyin in Toutiao zu binden Mar 22, 2024 pm 05:56 PM

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.

Wie binde ich die Cainiao-App an Pinduoduo? Wie füge ich den Cainiao Wrap zur Pinduoduo-Plattform hinzu? Wie binde ich die Cainiao-App an Pinduoduo? Wie füge ich den Cainiao Wrap zur Pinduoduo-Plattform hinzu? Mar 19, 2024 pm 02:30 PM

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? Wie verwende ich die PUT-Anfragemethode in jQuery? Feb 28, 2024 pm 03:12 PM

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

So binden Sie die Xiaomi-Auto-App an das Ladesäulengerät So binden Sie die Xiaomi-Auto-App an das Ladesäulengerät Apr 01, 2024 pm 06:52 PM

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.

So binden Sie die Cainiao-APP an Pinduoduo. So binden Sie die Cainiao-APP an Pinduoduo So binden Sie die Cainiao-APP an Pinduoduo. So binden Sie die Cainiao-APP an Pinduoduo Mar 19, 2024 pm 05:16 PM

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

Was soll ich tun, wenn meine kleine Blackbox nicht an Steam gebunden werden kann? Was soll ich tun, wenn meine kleine Blackbox nicht an Steam gebunden werden kann? Mar 12, 2024 pm 03:10 PM

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.

See all articles