【发布时间】:2010-03-20 23:56:03
【问题描述】:
我在处理 window.onload 和 document.onload 事件时遇到了问题。我读到的所有内容都告诉我,在 DOM 完全加载其所有资源之前,这些不会触发,看来这对我来说并没有发生:
我在 Chrome 4.1.249.1036 (41514) 和 IE 8.0.7600.16385 中尝试了以下简单页面,结果相同:都显示消息“失败!”,表示未加载 myParagraph(因此 DOM似乎不完整)。
<!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>
我在外部 .js 文件中使用了比这更复杂的脚本,但这说明了问题。我可以通过让window.onload 设置一个半秒的计时器来运行doThis() 来让它工作,但这似乎是一个不优雅的解决方案,并且没有回答为什么window.onload 似乎没有做什么的问题每个人都说有。另一种解决方案是设置一个计时器来检查 DOM 是否已加载,如果没有,它将在半秒后调用自身(因此它将继续检查直到 DOM 加载完毕),但这对我来说似乎过于复杂。
有没有更合适的事件可以使用?
【问题讨论】:
-
我看到的第一个错误是您评估 [function result] 而不是 [function] 本身。你能看到
doThis()是一个在评估后返回未定义的语句,因为doThis没有return运算符。window.onload = doThis;将完成这项工作。注意没有括号 -
@DavidMason W3Schools 的信息来源很差。他们不以任何方式隶属于 W3C。 不要将 w3schools 视为权威的信息来源,以应有的方式对待它们:在搜索真正的参考网站时必须跳过的令人讨厌的链接。
-
@doug65536 现在的我完全同意。我向不确定的人推荐 w3fools.com。这些天我倾向于直接去 developer.mozilla.org 获取高质量的信息,然后如果我在那里找不到我想要的东西(通常是当我试图做一些荒谬的事情时),请进行更广泛的搜索)。我很尴尬,过去的我发布了……但我可以删除它!在那里,互联网上对 w3schools 的引用不那么天真了 :) 感谢您发现它。
标签: dom dom-events getelementbyid onload onload-event