Wenn javascript-Funktionen ausgeführt
Ich denke, es ist eine einfache Frage, aber ich habe die Suche rund um und habe nicht die Antwort gefunden überall.
Den denke ist, dass ich eine html-Seite mit einigen Skripten (in den Körper) wie folgt ein:
<script type="text/javascript">grf();</script>
Den grf () - Funktion definiert ist, in eine externe .js-Datei.
Die Frage ist: wird diese Funktion ausgeführt, sobald der browser geladen wurde, die Seite UND alle externen js-Dateien? Oder kann es sein, dass die Funktion ausgeführt wird, bevor die .js-Dateien werden geladen? Und wenn ja, wie kann ich dies verhindern?
- Vielen Dank für die Beantwortung der ersten Frage, bei der die Funktionen ausgeführt werden. Für die zweite Frage, es scheint, die meisten von Ihnen einig, dass die beste option ist die Verwendung von jQuery. Aber ich Frage mich, ob es möglich ist, zu wissen, ob eine Funktion definiert ist (geladen) oder nicht. Zum Beispiel kann ich so etwas wie dies tun, um sicherzustellen, dass ein elem geladen wurde: function ff() { if (!Dokument.getElementById('elem')) setTimeout('ff()', 250); // von hier Aus kann ich verwenden 'elem' } Aber gibt es eine Möglichkeit zu wissen, ob eine Funktion definiert ist?
- test mit: if (typeof(functionName) != 'undefined') { // Funktion }
- Wenn nicht alle libs, und Sie wollen, um code auszuführen, verwendet der DOM, der zuverlässigste Weg ist, um Ihre Skript-Tags nach dem body-tag schließen, statt der polling-Mechanismus, die Sie verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu sehen, ob eine Funktion definiert ist:
Wenn ein externes Skript gefunden wird, wird die (x)html nicht weiter Lesen, bis das externe Skript Lesen (und code darin ausgeführt, wenn es einen ausführbaren code dort).
So, aufrufen einer Funktion in einer externen Datei nach der externen Datei war 'inbegriffen' nicht erzeugen kann eine Funktion nicht definiert Fehler. (Beachten Sie jedoch, dass Sie erhalten Fehler, wenn das externe Funktion versucht, das DOM zu verändern oder Elemente, die noch "nicht vorhanden" in die Seite.)
if (myFunc)
wenn myFunc ist nicht definiert, wird einen Fehler verursachen.if (typeof myFunc == "undefined")
nicht (wie z0n erwähnt)Die Funktion, die ausgeführt wird, wenn es gefunden wird. Wenn Sie möchten, es zu laufen, nachdem die Seite geladen wurde, wird die standard-Methode ist, Haken Sie das onload-Ereignis des Fensters. jQuery hat große Unterstützung für diese, aber wir beginnen mit Boden-Ebene:
Diese wird stampfen auf andere onload-Handler als zugewiesen wurden, die zuvor an der Seite, die ist, warum die meisten Menschen verwenden jQuery, die vorsichtig an die Kette zu vorherigen Handler:
Natürlich für das zweite Beispiel, müssen Sie die jQuery-Bibliotheken, die weiter oben auf der Seite (die es klingt wie Sie nicht in der Lage bist, das zu tun).
grf()
) aufgetreten ist.Die Methode wird ausgeführt, wie der browser die Seite geladen wird, wenn es das andere Ende erreicht, dass
<script>
block. Wenn die externe JS-Datei in die Seite, weiter unten, als da, wo diese Methode aufgerufen wird, wird es werfen eine Fehlermeldung (Methode nicht angegeben).Wenn Sie möchten, warten Sie, bis die Seite und Vermögenswerte wurden geladen, es ist am besten, um eine Bibliothek. Mit dem built-in
onload
Veranstaltung vorgeschlagen, ist begrenzt, weil es unterstützt nur das hinzufügen von einem handler (hinzufügen von einem anderen überschreibt den vorherigen). Hier ist ein Beispiel für die Verwendung jQuery:Solange die script-Datei enthalten ist, über die Funktion, die Verwendung, die Funktion verfügbar sein wird. Der browser wird angehalten, Rendern, wenn es auf eine
tag. Es wird erst dann wieder aufgenommen, die Bearbeitung der Dokument-Seite, wenn das Skript heruntergeladen und analysiert. So dass jede definierte Funktion in das Skript werden direkt nach:
Dies ist tatsächlich nicht immer ein gewünschtes Verhalten - manchmal tun Sie nicht wollen, zu warten, für ein Skript herunterladen, wie kann es machen Sie Ihren code scheinen langsam. Eine Technik ist, um alle Skripte laden und ausführen am unteren Rand der Seite, bevor
</body>
, wenn alle der HTML-Code wird bereits gerendert.Browser führt es, wenn es sieht, den tag. Nicht nur die anderen Skripte können nicht geladen werden, doch DOM könnte nicht gebaut werden. Es ist jedoch gewährleistet, dass Skripts ausgeführt werden, in der Reihenfolge erscheinen Sie in der HTML.
Wenn Sie jQuery verwenden, es hat $.ready () - Funktion, dass Anrufe Rückruf, wenn das DOM bereit ist und so alle Skripte sind bereits geladen. Verwenden Sie es wie
oder mit anonymer Funktion, wie es Häufig verwendet wird.
Der beste Weg, um zu verhindern, dass Probleme mit scripts ist die Verwendung einer JavaScript-Bibliothek wie jQuery, Mootools etc. die machen es einfach zu binden, beliebigen code auf verschiedene Ereignisse (dom.bereit etc.) um sicherzustellen, dass alles geladen wird, vollständig im Voraus.