jQuery: Erzwingt die Ausführungsreihenfolge von document.ready () -Aufrufen
Arbeite ich auf eine Codebasis mit mehreren Blöcken von code-Einstellung das Verhalten auf dem Dokument.ready() (jQuery). Gibt es eine Möglichkeit zu erzwingen, dass ein bestimmter block aufgerufen wird, bevor eine der anderen?
Hintergrund:
Ich brauche, um zu erkennen, JS-Fehlern in einer automatisierten Testumgebung, also brauche ich den code, startet die Protokollierung JS Fehler ausgeführt werden soll, bevor alle anderen JS-code ausgeführt wird.
Kommentar zu dem Problem
Tritt der Fehler logging-code-block wirklich müssen warten, bis der DOM fertig zu sein?
@KevinB Große Nummer! Es kann sogar sinnvoll sein, für die es, nicht zu warten,...
@KevinB ich bin nicht sehr vertraut mit JS. Wenn ich die code außerhalb jeder block, wäre es garantiert ausgeführt werden, bevor anderer code ausgeführt wurde?
Es läuft genau, wo Sie es in Ihren DOM. Wenn es das erste script-tag in Ihre Seite ein (sagen wir an der Spitze der HTML
head
), wird es zuerst ausgeführt. @AnkitSoni vorausgesetzt, es wird innerhalb der html-tags und alle anderen code-Blöcke setzen auf DOMReady, wird es ausgeführt, bevor der code in das DOMReady-Blöcke.
InformationsquelleAutor der Frage Ankit Soni | 2012-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
document.ready()
callbacks werden aufgerufen, in der Reihenfolge, wie Sie eingetragen wurden. Registrieren Sie Ihre Test-Rückruf zuerst, es wird zuerst aufgerufen werden.Auch wenn Ihre Tests code nicht wirklich brauchen, um das DOM manipulieren, dann werden Sie möglicherweise in der Lage, um es auszuführen, da der code analysiert wird, und nicht warten, bis der DOM fertig ist, die ausgeführt würde, bevor die anderen
document.ready()
callbacks aufgerufen. Oder, könnten Sie vielleicht ausführen, die Teil Ihrer Prüfung den code sofort und verzögern nur den Teil, der verwendet den DOM bisdocument.ready()
.Andere Idee ist (nur für Testzwecke), die Sie ausgeführt werden könnte eine leicht modifizierte version von jQuery, die ein flag Hinzugefügt, um
document.ready()
dass wenn übergeben und auftrue
angegeben, die zum aufrufen dieser Funktion zuerst, oder Sie könnte eine neue Methode hinzufügendocument.readyFirst()
würde, rufen Sie Ihre Funktion zuerst. Das würde bedeuten geringfügige änderungen derdocument.ready()
processing-code in jQuery.InformationsquelleAutor der Antwort jfriend00
Als @jfriend00 erwähnen, dass
ready callbacks are called in the order they were registered.
So, auch wenn dieser code-block genannt, sich auf den Anfang, Sie können eine andere callback-in ihm, so werde es ausgeführt am endmost.
InformationsquelleAutor der Antwort ecabuk
Sollten Sie in der Lage sein zu verwenden holdReady, dies zu tun. Solange es enthalten ist, bevor Sie Ihre Veranstaltungen bereit, Sie können Ihre eigenen code und dann die trigger der anderen Veranstaltungen bereit.
InformationsquelleAutor der Antwort jncraton
Führen Sie die Protokollierung starten code in DOMReady und andere Initialisierung zu laden. Oder Sie könnten Ihre eigene Initialisierungs-manager, welche Anrufe Ihre logging-start-code zuerst und dann alle anderen Initialisierungs callbacks (sofern diese registriert sind, mit Ihrem manager und nicht von jQuery, es sei denn, Sie wollen hack jQuery und extrahieren Sie Sie von dort, die ich nicht beraten).
InformationsquelleAutor der Antwort Mr. TA
War ich versucht, etwas ähnliches zu tun, ich war in dem laden eine Reihe von polyfills, hatte .ready () - Funktionen, aber ich hatte auch meinen eigenen .ready()s auf der Seite, die ich brauchte zuerst ausgeführt wird, obwohl die polyfills wurden im header geladen.
Fand ich ein netter Weg, um es durch eine .ready() sehr früh (direkt nach jQuery geladen wird) , führt Funktionen aus einem array. Weil es sehr früh in den source-code es ist .ready() wird zuerst ausgeführt. Weiter unten auf der Seite kann ich hinzufügen, Funktionen und Anordnung, so dass Sie alle ausführen, bevor alle anderen .ready()s.
Hab ich wickelte es in ein .beforeReady () - Funktion und legen Sie es auf GitHub als jQuery-Vor-Bereit für jeden, der interessiert ist.
https://github.com/aim12340/jQuery-Before-Ready
InformationsquelleAutor der Antwort EamonnM