Was sind die Unterschiede zwischen der JavaScript- window.onload
und der jQuery- $(document).ready()
Methode?
javascript
jquery
dom-events
unobtrusive-javascript
Vaibhav Jain
quelle
quelle
$().ready()
lässt eswindow.onload
manchmal feuern .Antworten:
Das
ready
Ereignis tritt auf, nachdem das HTML-Dokument geladen wurde, während dasonload
Ereignis später auftritt, wenn auch der gesamte Inhalt (z. B. Bilder) geladen wurde.Das
onload
Ereignis ist ein Standardereignis im DOM, während dasready
Ereignis für jQuery spezifisch ist. Der Zweck desready
Ereignisses besteht darin, dass es so früh wie möglich nach dem Laden des Dokuments auftritt, damit der Code, der den Elementen auf der Seite Funktionen hinzufügt, nicht auf das Laden des gesamten Inhalts warten muss.quelle
ready
Ereignis ist spezifisch für jQuery. DasDOMContentLoaded
Ereignis wird verwendet, wenn es im Browser verfügbar ist, andernfalls wird es emuliert. Es gibt keine genaue Entsprechung im DOM, da dasDOMContentLoaded
Ereignis nicht in allen Browsern unterstützt wird.onload
.onload
ist der Name einer Objekteigenschaft, in der eine Funktion gespeichert ist, die beimload
Auslösen des Ereignisses aufgerufen werden soll.window.onload
ist das integrierte JavaScript-Ereignis, aber da die Implementierung in allen Browsern (Firefox, Internet Explorer 6, Internet Explorer 8 und Opera ) subtile Macken aufwies, bietet jQuery diese , die diese abstrahieren, und wird ausgelöst, sobald das DOM der Seite fertig ist (wartet nicht auf Bilder usw.).document.ready
$(document).ready
(Beachten Sie, dass dies nichtdocument.ready
der Fall ist. Dies ist eine jQuery-Funktion, die die folgenden Ereignisse umschließt und für Konsistenz sorgt:document.ondomcontentready
/document.ondomcontentloaded
- ein neues Ereignis, das ausgelöst wird, wenn das DOM des Dokuments geladen wird (dies kann einige Zeit dauern , bevor die Bilder usw. geladen werden); wieder etwas anders im Internet Explorer und im Rest der Weltwindow.onload
(die auch in alten Browsern implementiert ist), die ausgelöst wird, wenn die gesamte Seite geladen wird (Bilder, Stile usw.)quelle
load
Ereignis vonwindow
wird in allen Browsern einigermaßen konsistent implementiert. Das Problem, das jQuery und andere Bibliotheken zu lösen versuchen, ist das von Ihnen erwähnte. Dasload
Ereignis wird erst ausgelöst, wenn alle abhängigen Ressourcen wie Bilder und Stylesheets geladen wurden. Dies kann lange dauern, bis das DOM vollständig geladen ist. gerendert und bereit für die Interaktion. Das Ereignis, das in den meisten Browsern ausgelöst wird, wenn das DOM bereit istDOMContentLoaded
, wird aufgerufen , nichtDOMContentReady
.onload
bisschen Objektschnüffeln war früher notwendig, auch bei (es gibt Unterschiede zu FF / IE / Opera). Was dasDOMContentLoaded
betrifft, sind Sie völlig richtig. Bearbeitung zur Verdeutlichung.document.onload
war nutzbar). Was die window.onload angeht:window.onload = fn1;window.onload=fn2;
- Nur fn2 wird beim Laden aufgerufen. Einige kostenlose Webhosts fügen ihren eigenen Code in Dokumente ein, und manchmal hat dies den In-Page-Code überlastet.$(document).ready()
ist ein jQuery-Ereignis. Die$(document).ready()
Methode von JQuery wird aufgerufen, sobald das DOM bereit ist (was bedeutet, dass der Browser den HTML-Code analysiert und den DOM-Baum erstellt hat). Auf diese Weise können Sie Code ausführen, sobald das Dokument zur Bearbeitung bereit ist.Wenn ein Browser beispielsweise das Ereignis DOMContentLoaded unterstützt (wie es viele Nicht-IE-Browser tun), wird es bei diesem Ereignis ausgelöst. (Beachten Sie, dass das DOMContentLoaded-Ereignis nur in IE9 + zum IE hinzugefügt wurde.)
Hierfür können zwei Syntaxen verwendet werden:
Oder die Kurzfassung:
Hauptpunkte für
$(document).ready()
:$
durch,jQuery
wenn Sie "$ ist nicht definiert" erhalten.$(window).load()
stattdessen.window.onload()
ist eine native JavaScript-Funktion. Daswindow.onload()
Ereignis wird ausgelöst, wenn der gesamte Inhalt Ihrer Seite geladen wurde, einschließlich DOM (Dokumentobjektmodell), Bannerwerbung und Bilder. Ein weiterer Unterschied zwischen beiden besteht darin, dass wir zwar mehr als eine$(document).ready()
Funktion haben können, aber nur eineonload
Funktion.quelle
Ein Windows-Ladeereignis wird ausgelöst, wenn der gesamte Inhalt Ihrer Seite vollständig geladen ist, einschließlich des DOM-Inhalts (Document Object Model) und des asynchronen JavaScript , der Frames und der Bilder . Sie können auch body onload = verwenden. Beide sind gleich;
window.onload = function(){}
und<body onload="func();">
sind verschiedene Möglichkeiten, dasselbe Ereignis zu verwenden.Das jQuery-
$document.ready
Funktionsereignis wird etwas früher ausgeführt alswindow.onload
und wird aufgerufen, sobald das DOM (Document Object Model) auf Ihre Seite geladen wurde. Es wird nicht darauf warten, dass die Bilder und Frames vollständig geladen werden .Entnommen aus folgendem Artikel: Wie
$document.ready()
unterscheidet sich vonwindow.onload()
quelle
quelle
Ein Wort zur Vorsicht bei der Verwendung
$(document).ready()
mit Internet Explorer. Wenn eine HTTP-Anforderung unterbrochen wird, bevor das gesamte Dokument geladen wird (z. B. während eine Seite zum Browser gestreamt wird, wird auf einen anderen Link geklickt), löst der IE das$(document).ready
Ereignis aus.Wenn Code innerhalb des
$(document).ready()
Ereignisses auf DOM-Objekte verweist, besteht die Möglichkeit, dass diese Objekte nicht gefunden werden, und es können Javascript-Fehler auftreten. Schützen Sie entweder Ihre Verweise auf diese Objekte oder verschieben Sie den Code, der diese Objekte auf das Ereignis window.load verweist.Ich konnte dieses Problem in anderen Browsern (insbesondere Chrome und Firefox) nicht reproduzieren.
quelle
Ein kleiner Tipp:
Verwenden Sie immer die
window.addEventListener
Option, um dem Fenster ein Ereignis hinzuzufügen. Auf diese Weise können Sie den Code in verschiedenen Ereignishandlern ausführen.Richtiger Code:
Ungültiger Code:
Dies liegt daran, dass Onload nur eine Eigenschaft des Objekts ist, die überschrieben wird.
In Analogie zu
addEventListener
ist es besser,$(document).ready()
als Onload zu verwenden.quelle
Veranstaltungen
$(document).on('ready', handler)
bindet an das Ready-Ereignis von jQuery. Der Handler wird aufgerufen, wenn das DOM geladen wird . Assets wie Bilder fehlen möglicherweise noch . Es wird niemals aufgerufen, wenn das Dokument zum Zeitpunkt der Bindung fertig ist. jQuery verwendet dafür das DOMContentLoaded -Event und emuliert es, wenn es nicht verfügbar ist.$(document).on('load', handler)
ist ein Ereignis, das ausgelöst wird, sobald alle Ressourcen vom Server geladen wurden . Bilder werden jetzt geladen. Während onload ein unformatiertes HTML-Ereignis ist, wird ready von jQuery erstellt.Funktionen
$(document).ready(handler)
eigentlich ist ein versprechen . Der Handler wird sofort aufgerufen, wenn das Dokument zum Zeitpunkt des Aufrufs bereit ist. Andernfalls wird es an dasready
-Event gebunden.Vor jQuery 1.8 ,
$(document).load(handler)
existierte als Alias zu$(document).on('load',handler)
.Weiterführende Literatur
quelle
$.fn.load
dass Sie sich nicht mehr als Ereignisordner verhalten. Tatsächlich ist es seit jquery 1.8 veraltet. Ich habe es entsprechend aktualisiertDas
$(document).ready()
ist ein jQuery Ereignis , das auftritt , wenn das HTML - Dokument vollständig geladen wurde, während daswindow.onload
Ereignis später eintritt, wenn alles , einschließlich der Bilder auf der Seite geladen.Außerdem ist window.onload ein reines Javascript-Ereignis im DOM, während das
$(document).ready()
Ereignis eine Methode in jQuery ist.$(document).ready()
ist normalerweise der Wrapper für jQuery, um sicherzustellen, dass alle geladenen Elemente für die Verwendung in jQuery verwendet werden ...Schauen Sie sich den jQuery-Quellcode an, um zu verstehen, wie er funktioniert:
Außerdem habe ich das folgende Bild als Kurzreferenz für beide erstellt:
quelle
window.onload: Ein normales JavaScript-Ereignis.
document.ready: Ein bestimmtes jQuery-Ereignis, wenn der gesamte HTML-Code geladen wurde.
quelle
Eine Sache, an die Sie sich erinnern sollten (oder sollte ich mich erinnern), ist, dass Sie
onload
s nicht so stapeln können, wie Sie es könnenready
. Mit anderen Worten, jQuery Magic erlaubt mehrereready
s auf derselben Seite, aber das können Sie nichtonload
.Der letzte
onload
überschreibt alle vorherigenonload
s.Eine gute Möglichkeit, damit umzugehen, ist eine Funktion, die anscheinend von einem Simon Willison geschrieben und unter Verwenden mehrerer JavaScript-Onload-Funktionen beschrieben wurde .
quelle
Document.ready
(ein jQuery-Ereignis) wird ausgelöst, wenn alle Elemente vorhanden sind, und sie können im JavaScript-Code referenziert werden, der Inhalt wird jedoch nicht unbedingt geladen.Document.ready
Wird ausgeführt, wenn das HTML-Dokument geladen wird.Der
window.load
wartet jedoch, bis die Seite vollständig geladen ist. Dies schließt innere Rahmen, Bilder usw. ein.quelle
Das Ereignis document.ready tritt auf, wenn das HTML-Dokument geladen wurde, und das
window.onload
Ereignis tritt immer später auf, wenn alle Inhalte (Bilder usw.) geladen wurden.Sie können das
document.ready
Ereignis verwenden, wenn Sie "früh" in den Renderprozess eingreifen möchten, ohne auf das Laden der Bilder warten zu müssen. Wenn Sie die Bilder (oder andere "Inhalte") benötigen, bevor Ihr Skript "etwas tut", müssen Sie warten, biswindow.onload
.Wenn Sie beispielsweise ein "Diashow" -Muster implementieren und Berechnungen basierend auf Bildgrößen durchführen müssen, möchten Sie möglicherweise warten, bis
window.onload
. Andernfalls können zufällige Probleme auftreten, je nachdem, wie schnell die Bilder geladen werden. Ihr Skript wird gleichzeitig mit dem Thread ausgeführt, der Bilder lädt. Wenn Ihr Skript lang genug ist oder der Server schnell genug ist, bemerken Sie möglicherweise kein Problem, wenn Bilder rechtzeitig eintreffen. Am sichersten wäre es jedoch, Bilder laden zu lassen.document.ready
Dies könnte ein schönes Ereignis für Sie sein, um Benutzern ein Zeichen fürwindow.onload
"Laden ..." anzuzeigen. Anschließend können Sie alle Skripts ausführen, für die Ressourcen geladen werden müssen, und schließlich das Zeichen "Laden ..." entfernen.Beispiele: -
quelle
window.onload
ist eine in JavaScript integrierte Funktion.window.onload
auslösen, wenn die HTML-Seite geladen wird.window.onload
kann nur einmal geschrieben werden.document.ready
ist eine Funktion der jQuery-Bibliothek.document.ready
Wird ausgelöst, wenn HTML und der gesamte in der HTML-Datei enthaltene JavaScript-Code, CSS und Bilder vollständig geladen sind.document.ready
kann je nach Bedarf mehrfach geschrieben werden.quelle
Wenn Sie sagen
$(document).ready(f)
, weisen Sie die Skript-Engine an, Folgendes zu tun:$
und wählen Sie es aus, da es sich nicht im lokalen Bereich befindet. Es muss eine Hash-Tabellensuche durchführen, bei der möglicherweise Kollisionen auftreten oder nicht.ready
des ausgewählten Objekts, bei dem eine weitere Hash-Tabellensuche im ausgewählten Objekt durchgeführt wird, um die Methode zu finden und aufzurufen.Im besten Fall handelt es sich hierbei um 2 Hash-Tabellen-Lookups. Dabei wird jedoch die schwere Arbeit von jQuery ignoriert, bei
$
der alle möglichen Eingaben in jQuery in der Küchenspüle vorgenommen werden. Daher wird wahrscheinlich eine andere Karte die Abfrage an den richtigen Handler senden.Alternativ können Sie dies tun:
welches wird
onload
es sich um eine Eigenschaft handelt oder nicht, indem Sie eine Hash-Tabellensuche durchführen, da diese wie eine Funktion aufgerufen wird.Im besten Fall kostet dies eine einzelne Hash-Tabellensuche, die notwendig ist, weil
onload
sie abgerufen werden muss.Im Idealfall kompiliert jQuery seine Abfragen zu Zeichenfolgen, die eingefügt werden können, um das zu tun, was Sie von jQuery wollten, jedoch ohne die Laufzeitausgabe von jQuery. Auf diese Weise haben Sie die Wahl zwischen beiden
eval
.quelle
window.onload wird von der DOM-API bereitgestellt und lautet "Das Ladeereignis wird ausgelöst, wenn eine bestimmte Ressource geladen wurde".
"Das Ladeereignis wird am Ende des Dokumentladevorgangs ausgelöst. Zu diesem Zeitpunkt befinden sich alle Objekte im Dokument im DOM, und alle Bilder, Skripte, Links und Unterrahmen wurden vollständig geladen." DOM-Onload
In jQuery wird $ (document) .ready () jedoch erst ausgeführt, wenn die Seite Document Object Model (DOM) für die Ausführung von JavaScript-Code bereit ist. Dies schließt keine Bilder, Skripte, Iframes usw. ein
Die jquery ready-Methode wird also früher als das dom onload-Ereignis ausgeführt.
quelle