2016-10-02 103 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将被设置为未定义的,因而是没有用的。

相关问题