Wenn ein Dritte JavaScript-Datei hängt und dauert eine Weile zu laden, wirdWie bald wird jQuery (document) .ready aufgerufen?
jQuery(document).ready(function() {})
müssen warten, dass vor laden aufgerufen wird?
Wenn ein Dritte JavaScript-Datei hängt und dauert eine Weile zu laden, wirdWie bald wird jQuery (document) .ready aufgerufen?
jQuery(document).ready(function() {})
müssen warten, dass vor laden aufgerufen wird?
Ja, es warten muss. Insbesondere können Sie sich nicht darauf verlassen, dass jQuery(document).ready()
ausgelöst wird, bevor andere Skripts ausgeführt werden können. ready
bindet an DOMContentReady, readystatechanged oder onload, je nachdem, was verfügbar ist.
Die Dokumentation besagt, dass "in den meisten Fällen das Skript ausgeführt werden kann, sobald die DOM-Hierarchie vollständig erstellt wurde". Beachten Sie, dass die einzige Garantie ist, dass das DOM bereit ist, wenn dieses Ereignis ausgelöst wird. Es garantiert Ihnen nichts anderes - weil es einfach nicht kann.
Dies ist zum Beispiel nicht in IE, Firefox oder Chrom arbeitet, ist brilliant.jsimmer vor dem ready()
Handler aufgerufen hat eine Chance, egal auszuführen, wie Sie das Script-Tags mischen:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8" type="text/javascript" ></script>
</head>
<body>
<script type="text/javascript" >
// <![CDATA[
alert("attaching event");
$(document).ready(function() { alert("fired"); });
// ]]>
</script>
<script type="text/javascript" src="brilliant.js" ></script>
</body>
</html>
FYI, hier ist der entsprechende Code von jquery-1.4.2:
bindReady: function() {
if (readyBound) {
return;
}
readyBound = true;
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if (document.readyState === "complete") {
return jQuery.ready();
}
// Mozilla, Opera and webkit nightlies currently support this event
if (document.addEventListener) {
// Use the handy event callback
document.addEventListener("DOMContentLoaded", DOMContentLoaded, false);
// A fallback to window.onload, that will always work
window.addEventListener("load", jQuery.ready, false);
// If IE event model is used
} else if (document.attachEvent) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent("onload", jQuery.ready);
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
try {
toplevel = window.frameElement == null;
} catch(e) {}
if (document.documentElement.doScroll && toplevel) {
doScrollCheck();
}
}
},
Ich denke, $ (Dokument) .ready() wird ausgeführt, wenn das HTML-Dokument geladen und gerendert wurde. Lesen Sie die Dokumentation für weitere Informationen
http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
'bereit()' läuft, wenn John Resig es laufen sollte entscheidet. Es kann zu verschiedenen Zeiten auf verschiedenen Browsern oder sogar auf verschiedenen Versionen desselben Browsers ausgeführt werden. Sie können sich nicht darauf verlassen, dass der Ereignishandler ausgelöst wird, bevor andere Skripts ausgeführt werden können. Das einzige, was Sie sicher sagen können, ist, dass Sie zum DOM gelangen können, wenn es ausgelöst wird. –
die Datei besonders sein kann js 3rd-Party zu blockieren, wenn es im Head-Tag ist. Versuchen Sie es kurz vor dem schließenden Tag <body>
.
Ich denke, die erste Antwort ist falsch - document.ready bedeutet nicht, dass der gesamte Inhalt geladen werden muss, es bedeutet, dass das dom abgeschlossen ist. Sonst würden jquery-Methoden, die in diesem Modus ausgeführt werden, erst ausgeführt, wenn alle Bilder (zum Beispiel) geladen wurden, was nicht der Fall ist.
bearbeiten
Es sieht aus wie das Verhalten für Skripte unterschiedlich ist, kann aber Browser spezifisch sein. Es gibt eine gute Erklärung hier:
JavaScript: DOM load events, execution sequence, and $(document).ready()
Laut Mozilla-Dokumentation für den "DOMContentLoaded" -Ereignis besteht der Hauptunterschied zwischen "ready" und "load" darin, dass die Seite nicht darauf wartet, dass Bilder geladen werden, bevor "ready" aufgerufen wird (dh der "DOMContentLoaded" -Handler) Firefox oder Webkit). Sagt nichts über das Ausführen von Skriptdateien.Da wir über ein single-threaded-Modell sprechen, sehe ich nicht, wie die "ready" -Handler aufgerufen werden könnten, während der Browser noch einen "
Bitte kommentieren Sie, wenn Sie sich für einen Downvote entscheiden. Vielen Dank. –