weibo_e_狼传说_0
2016-10-30 16:19
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
</head>
<script type="text/javascript">
var num=0;
function startCount() {
document.getElementById('count').value=num;
num=num+1;
setTimeout("startCount()",1000);
}
setTimeout("startCount()",1000);
startCount();//用了这句话就报错了
</script>
</head>
<body>
<form>
<input type="text" id="count" />
</form>
</body>
</html>
首先,这里script位置在代码前面,按照页面加载顺序,从上往下;
如果用 startCount(),当加载到document.getElementById('count')这一句的时候,并不能获取到body里面的元素(因为还没加载到),所以会报错;
因为如果用 setTimeout("startCount()",1000),意思延迟1秒钟再去执行startCount函数,在这1秒钟内,body里面的元素已经加载完毕,再去执行startCount函数就能够正常执行document.getElementById('count');
这就是原因,改进办法很简单,直接将整个<script>放到</body>上方即可
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
</head>
<body>
<script type="text/javascript">
function startCount() {
document.write(0);
setTimeout("startCount()",1000);
}
startCount();
</script>
</body>
</html>
//这串代码只有360极速模式下能一直执行写0。火狐,ie都不行。谷歌没试过.。这是为什么啊
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
</head>
<body>
<form>
<input type="text" id="count" />
</form>
<script type="text/javascript">
var num=0;
function startCount() {
document.getElementById('count').value=num;
num=num+1;
setTimeout("startCount()",1000);
}
startCount();//用了这句话就报错了
</script>
</body>
</html>
这样子就可以了,解决办法参考了
http://www.phpernote.com/javascript-function/1135.html
望采纳
JavaScript进阶篇
468276 学习 · 21892 问题
相似问题