我有这个示例文档:
<html>
<body>
<script type="text/javascript">
document.body.onload = myFunc();
function myFunc() {
element = document.getElementById('myDiv');
element.innerHTML = 'Hello!';
}
</script>
<div id="myDiv"></div>
</body>
</html>
如果 myFunc
是 document.body.onload
的回调,为什么 'element' 为空?
相反,如果将脚本插入到 div 之后,它会起作用:
<html>
<body>
<div id="myDiv"></div>
<script type="text/javascript">
document.body.onload = myFunc();
function myFunc() {
element = document.getElementById('myDiv');
element.innerHTML = 'Hello!';
}
</script>
</body>
</html>
我的问题是:如果我在处理程序函数中使用 onload
事件,我是否应该拥有整个 DOM?我为什么不呢?
最佳答案
问题是您正在立即调用该函数(并分配其返回值)。
改为分配函数,它将起作用:
document.body.onload = myFunc;
您还应该在函数中使用 var element
以避免创建全局变量。
或者如果你想迷惑别人:
document.body.onload = myFunc();
function myFunc() {
return function() {
var element = document.getElementById('myDiv');
element.innerHTML = 'Hello!';
};
}
但让我们不要那样做。这里没有意义。 ;)
关于JavaScript 加载和 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324352/