![](/img/trans.png)
[英]Why does window.onload work while document.onload doesn't?
[英]Why it doesn't work in document.onload?
<script>
window.onload= function(){
var a = document.getElementById('a');
var b = document.getElementById('ct');
setInterval('b.innerHTML = a.duration',1000);
};
</script>
//Second script
<script>
var a = document.getElementById('a');
var b = document.getElementById('ct');
window.onload= function(){
setInterval('b.innerHTML = a.duration',1000);
};
</script>
为什么第一个脚本不起作用?
铬:
未捕获的ReferenceError:b未定义
你需要指定一个函数作为setInterval
参数,你有问题:
setInterval('b.innerHTML = a.duration',1000);
应该:
setInterval(function foo(){b.innerHTML = a.duration},1000);
我的猜测是:因为你在第一个脚本中使用了a
和b
var
。 这使得变量本地变量在window.onload
(而不是global)中,并且setInterval
的代码无法访问它们。
删除var
,它应该工作。
setInterval
在全局范围内运行。 您在setInterval
中引用的无法从全局范围访问的任何变量(如第一个示例中的本地a
和b
将在执行时未定义。
在第一个脚本中,“a”和“b”是在事件范围内定义的变量。 “setInterval”在文档(全局)范围中查找“innerHTML”属性。 在第二个样本中,“a”和“b”在事件定义之外,即直接在文档范围中定义,因此它们通过“setInterval”函数进行重新计算。
您无法在.onload中引用文档元素,因为尚未加载文档。 将代码移到</body>
之前的文档末尾。
它还避免了.onload中多个事件处理程序的问题,因为您实际上覆盖了任何预先存在的事件处理程序。 使用addEventListener
附加事件处理程序。
像这样:
<body>
// markup
<script>
var a = document.getElementById('a');
var b = document.getElementById('ct');
setInterval('b.innerHTML = a.duration',1000);
</script>
</body>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.