Tengo problemas con los eventos window.onload y document.onload. Todo lo que leo me dice que esto no se disparará hasta que el DOM esté completamente cargado con todos sus recursos, parece que esto no me sucede:window.onload parece activarse antes de que se cargue DOM (JavaScript)
Intenté la siguiente página simple en Chrome 4.1.249.1036 (41514) y IE 8.0.7600.16385 con el mismo resultado: ambos mostraban el mensaje "¡Falló!", Lo que indica que myParagraph no está cargado (por lo que DOM parece incompleto).
<!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>
Estoy usando scripts más complejos que este, en un archivo .js externo, pero esto ilustra el problema. Puedo hacer que funcione teniendo window.onload establecer un temporizador de medio segundo para ejecutar doThis(), pero esto parece una solución poco elegante, y no responde la pregunta de por qué window.onload no parece hacer lo que todos dicen que sí. Otra solución sería establecer un temporizador que verifique si el DOM está cargado, y si no se llamará solo medio segundo más tarde (por lo que seguirá revisando hasta que se cargue el DOM), pero esto me parece demasiado complejo. ¿Hay algún evento más apropiado para usar?
primer error que veo es que assing [resultado de la función] en lugar de [Función] sí mismo.¿Puedes ver 'doThis()' es una declaración que devuelve indefinido después de la evaluación porque 'doThis' no tiene operador' return'. 'window.onload = doThis;' hará el trabajo. Tenga en cuenta que no hay paréntesis – Dan
@DavidMason W3Schools es una fuente de información deficiente. No están afiliados con el W3C de ninguna manera. * No * trate w3schools como una fuente autorizada de información, trátelas de la manera en que merecen ser tratadas: vínculos molestos que debe omitir cuando busca un sitio web de referencia real. – doug65536
@ doug65536 en la actualidad yo estoy completamente de acuerdo. Recomiendo w3fools.com para cualquiera que no esté seguro. Tiendo a ir directamente a developer.mozilla.org para obtener información de alta calidad en estos días, luego hago una búsqueda más extensa si no encuentro lo que estoy buscando allí (que generalmente es cuando estoy tratando de hacer algo ridículo) Estoy bastante avergonzado de que el pasado haya publicado ... ¡pero puedo borrarlo! Allí, una referencia menos ingenua a w3schools en Internet :) Gracias por detectarlo. –