为什么不能设置' document.getElementById("text");’走向全球
Why can't set `document.getElementById("text"); ` to be global?
这是我的60秒计数代码,它运行成功。
<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");
为全局时程序不能运行
它会工作,但在您的第二个示例中,在脚本运行并试图找到元素时,它不在那里,因为您既没有使用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>
因为你只需要一个DOM元素在你的代码运行时可用,你也可以使用DOMContentLoaded事件,并保持你的代码在头部:
<script>
document.addEventListener("DOMContentLoaded", function() {
console.log("DOM fully loaded and parsed");
});
</script>
然后将所有代码放入事件侦听器。
您正在将<script>
加载到<head>
文件中,这意味着在生成正文之前脚本已完全加载。
在第一个代码片段中,c=document.getElementById("text")位于脚本中的一个函数中。
因此,该语句只在函数被调用时执行。
这个调用发生在主体被加载之后。
此时,您的id="text"的<div>
元素已经存在,因此getElementById能够找到它,并且c被正确定义。
当您将该语句移到全局作用域之外时,该语句在body被加载之前执行(在创建div之前)。
因此,document.getElementbyID("text")将找不到任何内容,c将被设置为undefined,因此没有任何用处。
相关文章:
- 如何将输入(type=text)从html表单传递到javascript函数
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 在文本区域中使用jQuery.text()保持换行符
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- Linkify/Clickable Text URL,但忽略那些已经包装在“;a href"'s
- Safari-->"应用程序缓存清单的MIME类型不正确:text/plain&”;
- "text长度"Internet Explorer中svg文本元素悬停时的更改