Wie re-attach jQuery-Funktionen nach dem AJAX-content laden?
Gibt es ein paar jQuery-UI-Funktionen, die ich nennen diesen Weg:
jQuery(document).ready(function(){
jQuery(".accordion").accordion();
});
Aber meine Seite ist AJAX-basiert und einige Seiten verwenden, Akkordeon, einige können es nicht verwenden. Es gibt wie 30+ andere Funktionen müssten neu befestigt, die eine problematische Entwicklung Aufgabe. Gibt es eine clevere Möglichkeit dieses Problem zu beheben, so dass jeder neue .accordion
wird diese automatisch angehängt?
Mögliche Lösungen und warum Sie nicht funktionieren:
- auslösende Dokument bereit, AJAX-Aufruf Ende wäre ideal, aber das ist nicht möglich
- mit
load()
ist keine option, da es ein CMS, wo Benutzer können die Installation von plugins - das bedeutet, dass unbekannte Anzahl von unbekannten Funktionen, plugins hinzufügen, die nur mitjQuery(document).ready();
- re-attach-Funktionen auf
ajaxComplete
- mit einer unbekannten Anzahl von unbekannten Funktionen, dies wird nicht funktionieren ohne änderung der AJAX-Skript jedes mal, wenn Sie installieren oder deinstallieren ein jQuery-plugin,
- Sind Sie Aufbau einer single page Web-App? Haben Sie sich überlegt ein framework wie Backbone?
- Vorsichtig aufrufen
$(".accordion").accordion()
mehrmals, da plugins nicht unbedingt behandeln mehrere Initialisierungen auf das gleiche element richtig. Um auf der sicheren Seite zu sein, empfehle ich zur Ruhigstellung der Aufruf, auf die neuen Inhalte z.B. nur$("#newContent .accordion").accordion()
- Gute Idee!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
DOMNodeInserted
Ereignis, und überprüfen Sie die accordion-Klasse.Beispiel für die Verwendung von DOMNodeInserted: http://jsfiddle.net/qErHs/
contentReloaded
Funktion initialisiert alle notwendigen plugins, und dann rufen Sie immer auf die komplette/success callback von jedem ajax-callback. Dies ist, was ich normalerweise tun, ist es nicht besonders schwer zu mantain und es funktioniert. (Sie hätte sich zu erinnern, Sie zu aktualisieren, wenn Sie neue plugins)Ich habe ein ähnliches Problem mit jQuery-widgets. Was ich Tat, war die Verwendung der ajaxComplete Methode zum befestigen des widgets.
so, die Funktion wird jedesmal aufgerufen, wenn eine AJAX-Methode abgeschlossen ist, und werden befestigen das Akkordeon, um alle neuen Elemente mit der Klasse Akkordeon
document ready
- dies würde für alles was ich brauche, aber das ist nicht möglich.startUI()
) und dann rufen Sie beide auf dem Dokument.bereit, und wenn ajax-Aufrufe erfolgt sind. Aber es ist wahrscheinlich eine bessere Idee Griff Dokument.bereit und Inhalt neu laden getrennt.http://api.jquery.com/on/
"Delegiert Veranstaltungen haben den Vorteil, dass Sie verarbeiten Ereignisse aus den untergeordneten Elementen Hinzugefügt werden, um das Dokument zu einem späteren Zeitpunkt."
jQuery(document).on('click', '.selector', function(){});
weilon()
funktioniert dieser Weg nur dann.Können Sie das Häkchen für ".Akkordeon"-Länge. Einfach eine Funktion erstellen...
und als rufen Sie diese Funktion auf, nachdem Ihre ajax_calls.
load()
.können Sie anwenderdefinierte Ereignisse nach dem ajax-Aufruf.