window.onload scheint zu triggern, bevor das DOM geladen wird (JavaScript)

8

Ich habe Probleme mit den window.onload- und document.onload-Ereignissen. Alles, was ich lese, sagt mir, dass diese erst ausgelöst werden, wenn das DOM vollständig mit all seinen Ressourcen geladen ist. Es scheint so, als ob das nicht für mich passiert:

Ich habe die folgende einfache Seite in Chrome 4.1.249.1036 (41514) und IE 8.0.7600.16385 mit dem gleichen Ergebnis versucht: Beide zeigten die Meldung "It failed!" an, was darauf hinweist, dass myParagraph nicht geladen ist (und somit das DOM unvollständig erscheint) ).

%Vor%

Ich verwende komplexere Skripte als diese in einer externen .js-Datei, aber das veranschaulicht das Problem. Ich kann es funktionieren lassen, indem ich window.onload einen Timer für eine halbe Sekunde gesetzt habe, um doThis () zu starten, aber das scheint eine unelegante Lösung zu sein, und beantwortet nicht die Frage, warum window.onload das nicht zu tun scheint Jeder sagt, dass es so ist. Eine andere Lösung wäre, einen Timer zu setzen, der prüft, ob das DOM geladen ist, und wenn nicht, wird es sich selbst eine halbe Sekunde später aufrufen (also solange, bis das DOM geladen ist), aber das erscheint mir zu komplex. Gibt es ein geeigneteres Ereignis zu verwenden?

    
David Mason 20.03.2010, 23:56
quelle

5 Antworten

8

Wenn das Zeitfenster geladen ist, wird der Körper nicht geladen. Daher sollten Sie Ihren Code auf folgende Weise korrigieren:

%Vor%

Getestet, um in FF / IE / Chrome zu funktionieren, obwohl Sie daran denken, auch document.onload zu behandeln.

Wie bereits erwähnt, ist die Verwendung von js-frameworks eine viel bessere Idee.

    
Li0liQ 21.03.2010, 00:14
quelle
9

Verwenden Sie einfach window.onload = doThis; anstelle von window.onload = doThis();

    
dgk 04.06.2010 12:13
quelle
7

Es ist wichtig zu verstehen, dass () ein -Operator ist, genau wie + oder && . () Nimmt eine Funktion auf und ruft sie auf.

In diesem Fall ist doThis ein Funktionsobjekt und () ist der Operator, der die Funktion aufruft. doThis() kombiniert zu zusammen ruft doThis auf, führt sie aus und berechnet den Rückgabewert von doThis

So window.onload = doThis() weist grundsätzlich den Rückgabewert von doThis auf window.onload

zu

Um das zu beheben, müssen Sie also auf die Funktion selbst verweisen, nicht auf sie.

Machen Sie window.onload = doThis

    
OverCoder 04.07.2016 02:17
quelle
1

Haben Sie versucht, stattdessen eine Javascript-Bibliothek zu verwenden, z. jQuery und es ist $(document).ready() function:

%Vor%     
M4N 21.03.2010 00:00
quelle
1

Es hängt davon ab, wo Sie die Onload-Funktion (Kopf- oder Bodytag oder weiter unten) einfügen, wobei die interne Ereignisbindung in verschiedenen Browsern leicht unterschiedlich aussieht.

Siehe auch window.onload vs. document.onload

    
Lorenz Lo Sauer 10.09.2011 12:37
quelle