Ich verwende folgenden Code, um einige Anweisungen nach dem Laden der Seite auszuführen.
<script type="text/javascript">
window.onload = function () {
newInvite();
document.ag.src="b.jpg";
}
</script>
Dieser Code funktioniert jedoch nicht ordnungsgemäß. Die Funktion wird auch dann aufgerufen, wenn einige Bilder oder Elemente geladen werden. Ich möchte die Funktion aufrufen, wenn die Seite vollständig geladen ist.
javascript
html
image
Neeraj Kumar
quelle
quelle
$(window).load()
alert
Funktion auf, bevor das Fenster neu gezeichnet wird (sodass es so aussieht, als würde es vor dem Laden aufgerufen)? Der Code sieht gut aus, und wenn Benutzer gezwungen werden, große Bibliotheken herunterzuladen, wird dieses Problem wahrscheinlich nicht behoben oder die Diagnose wird einfacher.Antworten:
Dies kann für Sie funktionieren:
oder wenn Sie sich mit jquery wohl fühlen,
$(document).ready()
wird auf DOMContentLoaded ausgelöst, aber dieses Ereignis wird unter Browsern nicht konsistent ausgelöst. Aus diesem Grund wird jQuery höchstwahrscheinlich einige umfangreiche Problemumgehungen implementieren, um alle Browser zu unterstützen. Und dies wird es sehr schwierig machen, das Verhalten mit einfachem Javascript "genau" zu simulieren (aber natürlich nicht unmöglich).Wie Jeffrey Sweeney und J Torres vorgeschlagen haben, ist es meiner Meinung nach besser, eine
setTimeout
Funktion zu haben , bevor die Funktion wie folgt ausgelöst wird:quelle
ready
wird nicht das tun, was das OP angefordert hat.ready
Wird ausgelöst, wenn das DOM geladen wird, nicht nachdem Elemente geladen wurden.load
wird ausgelöst, nachdem die Elemente geladen / gerendert wurden.load
).setTimeout
ist eine schlechte Idee. Das Laden der Seite dauert weniger als 3 Sekunden (oder n Sekunden, je nachdem, welchen Wert Sie wählen). Wenn das Laden länger dauert, funktioniert es nicht. Wenn die Seite schneller geladen wird, muss sie ohne Grund warten.JavaScript
Gleiches gilt für jQuery:
HINWEIS: - Verwenden Sie das folgende Markup nicht (da es andere gleichartige Deklarationen überschreibt):
quelle
Wenn Sie jQuery verwenden können, sehen Sie sich load an . Sie können dann festlegen, dass Ihre Funktion ausgeführt wird, nachdem Ihr Element vollständig geladen wurde.
Betrachten Sie beispielsweise eine Seite mit einem einfachen Bild:
Der Ereignishandler kann an das Bild gebunden werden:
Wenn Sie zum Laden alle Elemente im aktuellen Fenster benötigen, können Sie verwenden
quelle
load
Methode nicht einfach eine Funktion mit Javascript an das Ladeereignis? Wie würde sich das von dem unterscheiden, was das OP bereits tut?addEventListener
die DOM0-onload
Eigenschaft möglicherweise eher verwendet als bindet .Ich bin ein bisschen verwirrt darüber, was Sie unter abgeschlossenem Seitenladen, "DOM Load" oder "Content Load" verstehen. In einer HTML-Seite kann das Laden eines Ereignisses nach einem Ereignis vom Typ zwei ausgelöst werden.
DOM-Laden: Damit wird sichergestellt, dass der gesamte geladene DOM-Baum von Anfang bis Ende geladen wird. Stellen Sie jedoch nicht sicher, dass der Referenzinhalt geladen wird. Angenommen, Sie haben Bilder über die
img
Tags hinzugefügt , sodass dieses Ereignis sicherstellt, dass alleimg
geladenen, aber keine Bilder ordnungsgemäß geladen wurden oder nicht. Um dieses Ereignis zu erhalten, sollten Sie folgendermaßen schreiben:Oder mit jQuery:
Nach dem Laden von DOM und Inhalten: Zeigt auch das Laden von DOM und Inhalten an. Dadurch wird sichergestellt, dass nicht nur
img
Tags, sondern auch alle Bilder oder anderen relativen Inhalte geladen werden. Um dieses Ereignis zu erhalten, sollten Sie folgendermaßen schreiben:Oder mit jQuery:
quelle
DOMContentLoaded
Event Handler scheint nichts für mich zu tun,load
tut es aber .Wenn Sie eine js-Funktion auf Ihrer HTML-Seite aufrufen möchten, verwenden Sie das Ereignis onload. Das Onload-Ereignis tritt auf, wenn der Benutzeragent das Laden eines Fensters oder aller Frames in einem FRAMESET abgeschlossen hat. Dieses Attribut kann mit BODY- und FRAMESET-Elementen verwendet werden.
quelle
Auf diese Weise können Sie beide Fälle behandeln - ob die Seite bereits geladen ist oder nicht:
quelle
Alternativ können Sie es unten versuchen.
Dies funktioniert in jedem Fall. Dies wird nur ausgelöst, wenn die gesamte Seite geladen ist.
quelle
Soweit ich weiß, ist es am besten, wenn Sie es verwenden
Die Antwort Nr. 1 bei der Verwendung des
DOMContentLoaded
Ereignisses ist ein Rückschritt, da das DOM geladen wird, bevor alle Assets geladen werden.Andere Antworten empfehlen,
setTimeout
die ich stark ablehnen würde, da sie völlig subjektiv für die Geräteleistung und die Netzwerkverbindungsgeschwindigkeit des Clients sind. Wenn sich jemand in einem langsamen Netzwerk befindet und / oder eine langsame CPU hat, kann das Laden einer Seite einige bis Dutzende Sekunden dauern, sodass Sie nicht vorhersagen können, wie viel ZeitsetTimeout
benötigt wird.Was
readystatechange
, es feuert , wennreadyState
Änderungen, die nach MDN noch vor dem seinenload
Fall.quelle
quelle
Wenn Sie keine JS-Frameworks verwenden, ist dieses Projekt der beste Weg, um den dom-fähigen Status mit Cross-Browser-Kompatibilität zu erhalten
https://github.com/ded/domready/blob/master/ready.js
quelle
Wenn Sie jQuery bereits verwenden, können Sie Folgendes versuchen:
quelle
Ich kann Ihnen sagen, dass die beste Antwort darin besteht, direkt nach dem
</body>
Befehl ein "Treiber" -Skript einzufügen. Es ist die einfachste und wahrscheinlich universellere Lösung als einige der oben genannten Lösungen.Der Plan: Auf meiner Seite steht eine Tabelle. Ich schreibe die Seite mit der Tabelle in den Browser und sortiere sie dann mit JS. Der Benutzer kann darauf zurückgreifen, indem er auf Spaltenüberschriften klickt.
Nachdem die Tabelle einen
</tbody>
Befehl beendet und der Text beendet hat, rufe ich in der folgenden Zeile das Sortier-JS auf, um die Tabelle nach Spalte 3 zu sortieren. Ich habe das Sortierskript aus dem Web entfernt, damit es hier nicht reproduziert wird. Zumindest für das nächste Jahr können Sie dies in Betrieb sehen, einschließlich des JS unterstatic29.ILikeTheInternet.com
. Klicken Sie unten auf der Seite auf "hier". Daraufhin wird eine weitere Seite mit der Tabelle und den Skripten angezeigt. Sie können sehen, dass die Daten gespeichert und dann schnell sortiert werden. Ich muss es etwas beschleunigen, aber die Grundlagen sind jetzt da.MakerMikey
quelle
Versuchen Sie diese jQuery :
quelle
ready
wird nicht das tun, was das OP angefordert hat.ready
Wird ausgelöst, wenn das DOM geladen wird, nicht nachdem Elemente geladen wurden.load
wird ausgelöst, nachdem die Elemente geladen / gerendert wurden.Rufen Sie eine Funktion auf, nachdem das Zeitlimit für das vollständige Laden der Seite vollständig eingestellt wurde
quelle
Ich neige dazu, das folgende Muster zu verwenden, um zu überprüfen, ob das Dokument vollständig geladen ist. Die Funktion gibt ein Versprechen zurück (wenn Sie IE unterstützen müssen, fügen Sie die Polyfüllung hinzu ), das aufgelöst wird, sobald das Laden des Dokuments abgeschlossen ist. Es wird
setInterval
darunter verwendet, da eine ähnliche Implementierung mitsetTimeout
zu einem sehr tiefen Stapel führen kann.Wenn Sie den IE nicht unterstützen müssen:
Mit dieser Funktion können Sie Folgendes tun:
quelle
Ich verwende Webkomponenten, damit das für mich funktioniert:
quelle
Fügen Sie Ihr Skript nach Abschluss des Body-Tags ein ... es funktioniert ...
quelle