![](/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.