2016-10-02 19 views
1

這是我的60秒計時代碼,它運行成功。爲什麼不能設置`document.getElementById(「text」); 「成爲全球?

<html> 
<head> 
<script type="text/javascript"> 
    var start=Date.now(); 
    function showtime(){ 
     var c=document.getElementById("text"); 
     var nowtime=60-Math.floor((Date.now()-start)/1000); 
     c.innerHTML="left time is "+ nowtime +" seconds"; 
    } 
    function countTime(){ 
     var c=document.getElementById("text"); 
     c.innerHTML="left time is 60 seconds";    
     setInterval("showtime()",1000); 
    } 
</script> 
</head> 
<body onload="countTime()"> 
<div id="text"></div> 
</body> 
</html> 

這裏var start=Date.now()使啓動一個全局變量,爲什麼var c=document.getElementById("text");不能行var start=Date.now();寫在下面,使變量c作爲全局變量?

<html> 
<head> 
<script type="text/javascript"> 
    var start=Date.now(); 
    var c=document.getElementById("text"); 
    function showtime(){ 
     var nowtime=60-Math.floor((Date.now()-start)/1000); 
     c.innerHTML="left time is "+ nowtime +" seconds"; 
    } 
    function countTime(){ 
     c.innerHTML="left time is 60 seconds";    
     setInterval("showtime()",1000); 
    } 
</script> 
</head> 
<body onload="countTime()"> 
<div id="text"></div> 
</body> 
</html> 

請解釋爲什麼該程序無法運行時設置document.getElementById("text");的詳細全球。

回答

3

它會起作用,但在腳本運行時嘗試查找元素的第二個示例中,它不存在,因爲您既沒有使用window.onload也沒有將腳本放在html下面。不要把JavaScript放在頭上。將代碼重新排列爲

<html> 
<head> 

</head> 
<body onload="countTime()"> 
<div id="text"></div> 
<script type="text/javascript"> 
    var start=Date.now(); 
    var c=document.getElementById("text"); 
    function showtime(){ 
     var nowtime=60-Math.floor((Date.now()-start)/1000); 
     c.innerHTML="left time is "+ nowtime +" seconds"; 
    } 
    function countTime(){ 
     c.innerHTML="left time is 60 seconds";    
     setInterval("showtime()",1000); 
    } 
</script> 
</body> 
</html> 

並且它正在工作。

1

既然你只需要一個DOM元素是當你的代碼運行可用,您也可以使用DOMContentLoaded事件,並保持你的代碼的頭:

<script> 
    document.addEventListener("DOMContentLoaded", function() { 
    console.log("DOM fully loaded and parsed"); 
    }); 
</script> 

然後你把所有的代碼事件監聽器。

1

您正在加載您<script><head>文件,這意味着產生身體前腳本滿載。

在你的第一個片段,C =的document.getElementById(「文本」)坐落在你的腳本的功能。

因此,該語句僅在函數被調用時執行。

該調用發生在主體加載後。

那時候,你的<div>元素存在id =「text」,所以getElementById能夠找到它,並且c被正確定義。

當你向外移動的這種說法對全球範圍然而,身體被加載之前(在創建DIV之前)執行該語句。

結果,的document.getElementById(「文本」)將找不到任何東西,C將被設置爲未定義的,因而是沒有用的。

相關問題