我遇到了关于 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被加载),但我觉得这种方法过于复杂。
有更合适的事件可以使用吗?
doThis()
是一个语句,在评估后返回未定义,因为doThis
没有return
运算符。window.onload = doThis;
就可以完成任务。请注意,这里没有括号。 - Dan