簡體   English   中英

為什么它在document.onload中不起作用?

[英]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);

我的猜測是:因為你在第一個腳本中使用了ab var 這使得變量本地變量在window.onload (而不是global)中,並且setInterval的代碼無法訪問它們。

刪除var ,它應該工作。

setInterval在全局范圍內運行。 您在setInterval中引用的無法從全局范圍訪問的任何變量(如第一個示例中的本地ab將在執行時未定義。

在第一個腳本中,“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM