Refire-Ready-Ereignis nach dem AJAX-Reload

8

Ich habe andere Threads recherchiert und bin einfach verwirrt.

Situation: Ich liefere ein generisches jQuery-Plugin, das das div, das der Benutzer dynamisch angibt, über AJAX lädt. Alles funktioniert gut, aber z. auf der Seite eines Benutzers gibt es ein Stück von JS, das nicht aufgerufen wird, weil das Ereignis "ready" nicht wiederholt wird.

Die übliche Situation wird sein, dass die anderen jQuery-Sachen des Benutzers nach jQuery (Dokument) .ready platziert werden.

Ich habe gerade den Aufruf getestet:

%Vor%

manuell - es hat überhaupt keine Auswirkungen, da ich annehme, dass "ready" nur einmal und nur einmal aufgerufen wird.

Was ist der richtige Weg, damit umzugehen? (Es wäre großartig, die allgemeinste mögliche Lösung anzubieten)

Ich würde gerne etwas tun, wie in diesem Thread vorgeschlagen:

Trigger $ document.ready (So ​​AJAX-Code, den ich nicht ändern kann, wird ausgeführt)

Aber ich denke, dass readyList jetzt privat ist und nicht mehr direkt manipuliert werden kann?

Es ist erwähnenswert, dass das von mir bereitgestellte Plugin eine Callback-Funktion für den Benutzer bereitstellt. Natürlich könnte (n) er nach dem Laden JS-Code dort eingeben.

Vielen Dank im Voraus und freundliche Grüße

    
arvgta 02.09.2012, 12:02
quelle

3 Antworten

11

Sie sollten nicht versuchen, die gesamte DOM-ready-Funktion neu zu laden. Besonders schädlich ist die n + n-Natur von Ereignissen, wenn Sie zwei Ereignisse auf dasselbe Element klicken, könnte zum Beispiel 4 werden, dann 8 usw., wenn die DOM-ready-Funktion wiederholt von ihnen ausgelöst wird.

Sie können dies vermeiden, indem Sie den Code entfernen, den Sie ausführen müssen, wenn Sie mit Ihrem Ajax-Aufruf fertig sind, und vermutlich die Population des Elements, von dem Sie hoffen, dass es von dem Ereignis, das Sie neu initialisieren möchten, profitieren würde.

%Vor%

Wenn du mit deinem Ajax-Anruf fertig bist, rufe einfach initialise() erneut an.

Alternativ können Sie auch .on verwenden und die Funktionen zum Aufsprudeln verwenden, so würde ich mit dieser Art von Problem umgehen. Es vermeidet, dass Sie jemals darüber nachdenken müssen, einen Teil der DOM-ready-Funktionen in Ihren Skripten neu zu initialisieren.

Zusätzlich zu Kommentaren

.on ermöglicht das Binden von Ereignissen an Elemente auf niedriger Ebene auf der Seite, die sich zu keinem Zeitpunkt ändern, während Sie steuern können, welche der dynamischen Elemente das Ereignis in diesem Container tatsächlich auslösen.

%Vor%

Wir wissen also, dass das <a> durch eine Ajax-Funktion erzeugt wird, nachdem das DOM ready-Ereignis ausgelöst wurde, daher würden dann alle darauf angewendeten direkten Ereignisse nicht funktionieren.

Stattdessen würden wir das Ereignis an ein Element mit niedrigerem Level binden und an das enthaltene dynamische DOM-Element blasen.

%Vor%     
David Barker 02.09.2012, 12:30
quelle
9

nur um meine Ergebnisse und Lösung zu teilen, hatte ich das gleiche Problem, dass nach einem AJAX neu laden die $ (Dokument) .ready Funktion wird nicht aufgerufen für dieses Problem habe ich Kombinationen dieser beiden Antworten verwendet, und am Ende eine sehr einfache Lösung gefunden

Meine Lösung sieht so aus

%Vor%

hoffe das hilft jemandem

    
Matija Kraljic 23.11.2013 12:40
quelle
0

Es sieht so aus, als würde die Verbindung mit # funktionieren, da href nicht funktioniert. Nur darauf achten. :)

    
Arnaud Janssens 17.05.2013 14:55
quelle

Tags und Links