新人第一次发帖,记录一下学习过程中的问题;学习JS时今天遇到一个有意思的问题,先附代码:[JavaScript] 纯文本查看 复制代码 <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
<script type="text/javascript">
var int=setInterval(clock, 100);
function clock(){
var time=new Date();
document.getElementById("clock").value = time;
}
</script>
</head>
<body>
<form>
<input type="text" id="clock" size="50" />
</form>
</body>
</html>
是一个计时器的简单应用,当我把计时器setInterval(clock, 100)取消,改成直接调用clock()函数时,提示报错:Cannot set property 'value' of null,但是使用计时器却显示正常,最后去网上找了很多相关问题,最后发现报错是因为dom还没有完全加载完成原因。
在HTML body部分中的JavaScripts会在页面加载的时候被执行。
在HTML head部分中的JavaScripts会在被调用的时候才执行。
浏览器解析html是从上到下的。
也找到了网上所说的两种解决办法:
1、按照HTML的解析顺序,可以把JS代码放在放在<body></body>标签之后;
2、绑定一个监听,当全部的html文档解析完之后,再执行代码:
通过windows.onload=function(){
//代码内容
}
总结一下报错的原因:
出现这个错误的原因是因为 JS代码放在head里的话,则先被解析,但这时候body还没有解析,所以会返回空值。 |