JQuery - macht Code für jedes neues DOM-Objekt ausführen instanziiert
-
20-08-2019 - |
Frage
Ich frage mich, ob dies möglich ist in JQuery.
Ich habe einige Javascript-Code, der DOM-Objekte im laufenden Betrieb, in Reaktion auf Benutzeraktionen erzeugt. Einige dieser DOM-Objekte sind in einer bestimmten Struktur - der Behälter immer das gleiche „class“ Attribut
.Was ich möchte, ist zu tun, jedes Mal, wenn eine neue Instanz eines DOM-Objekt mit Klasse „X“ erstellt wird, möchte ich das gleiche Stück Javascript-Code auszuführen. Dieser Code wird ein „Onclick“ -Ereignis zu diesem DOM-Objekt hinzuzufügen.
Leider kann ich nicht nur den Code setzen, der die Onclick in document.ready (), da die Objekte zuweist, die es bindet an on the fly erstellt werden, lange nach document.ready () ausgeführt hat.
Hat JQuery können Sie persistente Bindungen einrichten, die automatisch auf eine Art von DOM-Objekt gebunden werden, auch wenn es im laufenden Betrieb erzeugt wird?
Lösung
Dies wird verwendet von ‚Live‘, ‚Delegierten‘ abgedeckt werden, oder manchmal auch ‚binden‘. Diese werden nun ersetzt durch ‚auf‘ allerdings gibt es einige Einschränkungen, wie hier diskutiert: Javascript Ereignisbindung Persistenz
Andere Tipps
Ich glaube, ich habe die Antwort auf meine eigene Frage, direkt in der JQuery-Dokumentation, überraschend genug.
http://docs.jquery.com/Events/live#typefn
live( type, fn )
Veröffentlicht in jQuery 1.3: Bindet einen Handler auf ein Ereignis (wie Klick) für alle aktuellen - und zukünftigen - verglichene Element. Können auch benutzerdefinierte Ereignisse binden.
Haben Sie sich eine die jQuery-Plugin namens Livequery ?
Von der Livequery Dokumentation Seite:
Zum Beispiel könnten Sie die verwenden folgenden Code ein Click-Ereignis zu binden zu allen A-Tags, auch alle A-Tags Sie könnte über AJAX hinzuzufügen.
$('a')
> .livequery('click', function(event) {
> alert('clicked');
> return false;
> });
Wenn Sie neue A-Tags hinzufügen, um Ihre Dokument, wird Live-Abfrage binden die Ereignis klicken und es gibt nichts anderes dass muss genannt oder durchgeführt werden.
Nicht möglich in jQuery Kern (wie Sie wahrscheinlich mit anderen Antworten realisiert habe auf einige Plugins) ausgelegt ... das kann eine sehr einfache Aufgabe sein, wenn Sie unbedingt alle Funktionen von so etwas wie livequery
braucht nicht
Für den Browser, die sie unterstützen - das DOM Level 2-Ereignis verwenden - 'DOMNodeInserted':
http: // www. w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mutationevents