de la fenêtre.onload semble déclencher avant que le DOM est chargé (JavaScript)

Je vais avoir des ennuis avec la fenêtre.onload et document.onload événements. Tout ce que je lis me dit, cela ne posera pas de déclenchement jusqu'à ce que le DOM est chargé avec toutes ses ressources, il semble que ce n'est pas le cas pour moi:

J'ai essayé les simple page dans google Chrome 4.1.249.1036 (41514) et internet explorer 8.0.7600.16385 avec le même résultat: à la fois affiché le message "échec!", indiquant que myParagraph n'est pas chargé (et donc les DOM semble incomplète).

<!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>

J'utilise plusieurs scripts complexes que cela, dans une externe .fichier js, mais cela illustre bien le problème. Je peux le faire en ayant la fenêtre.onload régler la minuterie pour une demi-seconde pour exécuter suivre(), mais cela semble être une solution peu élégante, et ne répond pas à la question de savoir pourquoi la fenêtre.onload ne semblent pas faire ce que tout le monde dit qu'il fait. Une autre solution serait de mettre une minuterie qui va vérifier si le DOM est chargé, et si non, il va juste s'appeler lui-même une demi-seconde plus tard (donc il va garder le contrôle jusqu'à ce que le DOM est chargé), mais cela semble trop complexe pour moi.
Est-il plus approprié de l'événement à utiliser?

Première erreur que je vois est que vous assing [résultat] au lieu de [fonction] lui-même. Pouvez-vous voir doThis() est un énoncé qui renvoie undefined après évaluation, parce que doThis n'a pas de return de l'opérateur. window.onload = doThis; va faire le travail. Remarque il n'y a pas parenthes
W3Schools est une mauvaise source d'information. Ils ne sont pas affiliés avec le W3C en aucune façon. Ne pas traiter w3schools comme une source fiable d'informations, de les traiter de la façon dont ils méritent d'être traités: les nuisances les liens que vous avez à sauter lorsque vous effectuez une recherche pour un véritable site de référence.
l'actuel me convient complètement. Je recommande w3fools.com pour quelqu'un qui n'est pas sûr. J'ai tendance à aller tout droit pour developer.mozilla.org pour la haute qualité de l'info ces jours, puis faire de plus en plus vastes de recherche si je ne trouve pas ce que je suis à la recherche (qui est généralement quand je suis en train de faire quelque chose de ridicule). Je suis assez gêné que par le passé-moi au courant... mais je peux le supprimer! Il y en a un moins naïve référence à w3schools sur Internet 🙂 Merci pour le spotting.

OriginalL'auteur David Mason | 2010-03-20