Fenster.onload auszulösen scheint vor dem DOM geladen wird (JavaScript -)
Ich habe ein Problem mit dem Fenster.onload und zu dokumentieren.onload-events. Alles was ich lese sagt mir, diese wird nicht ausgelöst, bis der DOM vollständig geladen ist, mit all seinen Ressourcen, wie es scheint, dies ist nicht der Fall für mich:
Ich habe versucht, die folgende einfache Seite in Chrome 4.1.249.1036 (41514) und IE 8.0.7600.16385 mit dem gleichen Ergebnis: sowohl die Anzeige der Meldung "fehlgeschlagen!", darauf hinweist, dass myParagraph nicht geladen wird (und so der DOM scheint unvollständig).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript">
window.onload = doThis();
//document.onload gives the same result
function doThis() {
if (document.getElementById("myParagraph")) {
alert("It worked!");
} else {
alert("It failed!");
}
}
</script>
</head>
<body>
<p id="myParagraph">Nothing is here.</p>
</body>
</html>
Ich bin mit komplexeren Skripten, als dieses in eine externe .js-Datei, aber das verdeutlicht das problem. Ich kann es arbeiten, indem er Fenster.onload-stellen Sie einen timer für eine halbe Sekunde ausführen doThis(), aber das scheint wie eine unelegant Lösung, und nicht die Frage beantworten, warum Fenster."onload" scheint nicht das zu tun, was jeder sagt, es tut. Eine andere Lösung wäre, einen timer einstellen, das überprüfen wird, wenn das DOM geladen ist, und wenn nicht wird er nur selbst aufrufen, eine halbe Sekunde später (so wird es keep smiling, bis die DOM geladen ist), aber das scheint zu kompliziert für mich.
Gibt es eine geeignete Veranstaltung zu verwenden?
- Erste Fehler, den ich sehe, ist, dass Sie assing Funktion [Ergebnis] anstelle der [function] selbst. Sehen Sie
doThis()
ist eine Anweisung, die den Wert undefiniert zurückgibt, nach der Auswertung, weildoThis
hat keinereturn
Betreiber.window.onload = doThis;
wird die Arbeit machen. Hinweis: es gibt keine parenthes - W3Schools ist eine schlechte Quelle von Informationen. Sie sind nicht in Verbindung mit den W3C-in keiner Weise. Nicht behandeln, w3schools, als maßgebliche Quelle der Informationen behandeln Sie so, wie Sie es verdienen behandelt zu werden: ärgernis links, die Sie haben, zu überspringen, wenn Sie suchen für eine echte Referenz-website.
- der Gegenwart mich stimmt völlig. Ich empfehlen w3fools.com für jeden, der sich unsicher ist. Ich Neige dazu, gerade zu gehen für developer.mozilla.org für hochwertige info in diesen Tagen, dann machen Sie eine umfassendere Suche, wenn ich nicht finde was ich Suche, gibt (die ist in der Regel, wenn ich versuche, etwas zu tun, lächerlich). Ich bin mir ziemlich peinlich, dass die Vergangenheit mich geschrieben... aber ich kann es löschen! Gibt es, eine weniger naive Verweis auf w3schools über das Internet 🙂 vielen Dank für das Auffinden es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Zeit-Fenster geladen wird, wird der Körper nicht mit noch geladen, daher sollten Sie korrekt den code in der folgenden Weise:
Getestet im FF/IE/Chrome, obwohl das denken über den Umgang mit
document.onload
zu.Wie bereits erwähnt, die Verwendung von js-frameworks werden eine weit bessere Idee.
speechSynthesis.getVoices()
geladen werden soll also auf der Suche nach Inhalten laden, ist möglicherweise nicht das, was zu tun ist - wenn es ein Skript zu laden, dann müssen Sie Ihr Skript, das versucht, es zu verwenden, um zu erscheinen, nachdem das Skript (und nicht habe das Skript markiert als async).Verwenden Sie einfach
window.onload = doThis;
stattwindow.onload = doThis();
Es ist wichtig zu verstehen, dass
()
ist ein Betreiber, wie+
oder&&
.()
Nimmt eine Funktion und ruft Sie auf.So, in diesem Fall
doThis
ist ein function-Objekt, und()
ist der operator, der die Funktion aufruft.doThis()
kombiniert werden, um zusammen ruftdoThis
ab, führt Sie aus und wertet den Rückgabewert vondoThis
So
window.onload = doThis()
im Grunde ist das zuweisen der Rückgabewert vondoThis
zuwindow.onload
Und so, um das zu beheben, müssen Sie den Verweis auf die Funktion selbst, nicht nennen.
Tun
window.onload = doThis
Haben Sie versucht, mit einer javascript-Bibliothek statt, z.B. jQuery und es ist
$(document).ready()
Funktion:Es hängt davon ab, wo Sie die onload-Funktion (head-oder body-tag oder weiter unten), mit internen Veranstaltung verbindlich seeemingly leicht unterschiedlich in den verschiedenen Browsern.
Siehe auch
Fenster.onload-vs-Dokument.onload