Erhält AJAX geladenen Inhalt ein "document.ready"?
Gestern hatte ich ein Problem, wo ein .on('click')
event-handler war ich die Zuweisung nicht richtig funktioniert. Stellt sich heraus, dass es ist, weil ich versuchte, zu gelten, dass .on('click')
vor diesem element gab es in den DOM, denn er war geladen über AJAX, und daher gab es noch nicht, wenn die document.ready()
kam.
Ich löste es mit einem peinlichen umgehen, aber meine Frage ist, wenn ich lege eine <script>
tag IN ajax geladenen Inhalt und anderen document.ready()
innerhalb, dass, wäre das zweite document.ready()
analysiert werden, NUR einmal, ajax-content ist fertig geladen? In anderen Worten, tut es Bedenken Sie, dass separat geladene ajax-content zu anderen document
und wenn ja, nicht mit anderen document.ready()
innerhalb dieser ajax-geladenen HTML funktioniert, wie ich denke, dass es funktioniert?
Alternativ; was wäre ein besserer Weg, um mit dieser situation umzugehen? (benötigt wird, fügen Sie einen Ereignis-listener, um ein DOM-element, das noch nicht vorhanden ist, auf document.ready()
)
InformationsquelleAutor der Frage | 2013-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deine Frage zu beantworten: Nein, Dokument.bereit wird nicht wieder Feuer, sobald ein ajax-request abgeschlossen ist. (Der Inhalt in ajax wird in das Dokument geladen, so gibt es nicht ein zweites Dokument für die ajax-content).
Um Ihr problem zu lösen, fügen Sie einfach die Ereignis-listener, um das Element, wo Sie laden die ajax-Inhalte in Sie.
Zum Beispiel:
Für
#id-of-the-element-in-the-ajax-content
Sie können jeden Selektor verwenden Sie in$("selector")
. Der einzige Unterschied ist, dass nur Elemente unterdiv.ajaxcontent-container
ausgewählt werden.Wie es funktioniert:
Solange
div.ajaxcontent-container
gibt es alle Elemente (ob Sie jetzt existieren oder erst in der Zukunft), die mit dem selector#id-of-the-element-in-the-ajax-content
löst das click-Ereignis.InformationsquelleAutor der Antwort nbar
Javascript in der resultierenden ajax-Aufruf nicht durchgeführt werden (standardmäßig) wegen der Sicherheit. Auch können Sie nicht direkt binden, Veranstaltung auf nicht existierende Elemente.
Sie kann binden Sie ein Ereignis, um einige Eltern, die nicht existiert, und sagen, es zu überprüfen, ist es Kinder:
Immer versuchen, so nah wie möglich an das auslösende element, wie Sie können, wird dies zu verhindern unnessesary sprudelt durch den DOM
Wenn Sie haben einige seltsame Funktionen geht, die man tun könnte etwas wie diese:
InformationsquelleAutor der Antwort Martijn
versuchen diese, die nicht arbeiten, weil Sie Ihre Steuern noch nicht erstellt ist und Sie versuchen, legen ein Ereignis, wenn Sie auf das Ereignis es wird funktionieren. lassen Sie mich wissen, wenn Sie irgendwelche Probleme.
InformationsquelleAutor der Antwort Rudresha Parameshappa
Hier ist die Antwort ein Delegierter Veranstaltung:
JSFiddle
JSFiddle - eine Wirklich dynamische
jQuery
HTML
InformationsquelleAutor der Antwort MonkeyZeus
Arbeite ich an einer code-Basis mit einem Freund, der hat eine ähnliche Anforderung. Die Delegierten event handler option ist auf jeden Fall am besten, wenn alle Sie wollen, ist das anfügen von Ereignishandlern. Eine alternative, vor allem, wenn Sie brauchen, um andere DOM-Verarbeitung in Ihrem
$(document).ready
- Funktion, um den code, den Sie ausführen möchten, die in einem script-element am Ende des Codes. Im Grunde, statt:Tauschen Sie das Skript und den rest der HTML um, so dass Sie haben:
Dies zwingt den browser zu Bearbeiten nur Ihre code-sobald es geladen hat jedes andere DOM-element in der dynamisch geladenen HTML. Natürlich bedeutet dies, müssen Sie sicherstellen, dass die eingefügten HTML nicht unbeabsichtigte UI Konsequenzen, die durch die Verwendung von CSS/HTML anstelle von JS. Es ist eine alte Javascript-trick aus den vergangenen Jahren. Als bonus, die Sie nicht brauchen, jQuery für mehr.
Ich sollte erwähnen, dass in Chrom v34, indem eine zweite
$(document).ready
Aufruf innerhalb einer<script>
tag in der dynamisch geladenen HTML scheint zu warten, für dynamisch geladene DOM zu laden und dann läuft die Funktion wie du Sie beschrieben hast. Ich bin mir nicht sicher, dieses Verhalten ist standard-aber es hat verursacht mir viel Kummer, wenn Sie versuchen zu automatisieren tests mit dieser Art code.InformationsquelleAutor der Antwort jeteon
JQuery, AJAX .load() ist eine eingebaute Funktion für den Umgang mit diesem.
Anstatt einfach
$('div#content').load('such_a_such.url');
Sie sollten auch eine callback-Funktion. JQuery .load () - bietet Platz für die folgenden:Jedoch, Sie müssen nicht die Daten enthalten, die argument.
http://api.jquery.com/load/
InformationsquelleAutor der Antwort RoboticRenaissance