为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不能在script中运行 startCount();而是要加setTimeout("startCount()",1000);

<!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>


正在回答

3 回答

首先,这里script位置在代码前面,按照页面加载顺序,从上往下;

如果用 startCount(),当加载到document.getElementById('count')这一句的时候,并不能获取到body里面的元素(因为还没加载到),所以会报错;

因为如果用 setTimeout("startCount()",1000),意思延迟1秒钟再去执行startCount函数,在这1秒钟内,body里面的元素已经加载完毕,再去执行startCount函数就能够正常执行document.getElementById('count');

这就是原因,改进办法很简单,直接将整个<script>放到</body>上方即可

2 回复 有任何疑惑可以回复我~
#1

weibo_e_狼传说_0 提问者

非常感谢!原来还有这个细节
2016-10-31 回复 有任何疑惑可以回复我~
#2

人在梦游中

你好,但是我使用 setTimeout("startCount()"); 也是可以调用的,这是为什么啊
2016-11-02 回复 有任何疑惑可以回复我~
#3

stone310 回复 人在梦游中

setTimeout("startCount()"); 这样写相当于 setTimeout("startCount()",0);这么写的意思是等文档流稳定后,再去执行setTimeout,所以可以调用,往深一点说就是定时器是有一个单独的线程,可以达到变更文档加载顺序的效果,更详细可自行上网查阅
2016-11-02 回复 有任何疑惑可以回复我~
#4

人在梦游中 回复 stone310

3Q.
2016-11-03 回复 有任何疑惑可以回复我~
#5

Tyler_me 回复 stone310

setTimeout("startCount()",0);就是相当于onload="startCount()";是吧?
2016-11-10 回复 有任何疑惑可以回复我~
#6

stone310 回复 Tyler_me

要等onload事件结束后,再执行settimeout里面的事件
2016-11-10 回复 有任何疑惑可以回复我~
#7

Tyler_me 回复 stone310

懂了,谢谢
2016-11-10 回复 有任何疑惑可以回复我~
查看4条回复

<!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都不行。谷歌没试过.。这是为什么啊


0 回复 有任何疑惑可以回复我~

<!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

望采纳

0 回复 有任何疑惑可以回复我~
#1

weibo_e_狼传说_0 提问者

我还有一个问题想请教请教你
2016-10-31 回复 有任何疑惑可以回复我~
#2

老友丶 回复 weibo_e_狼传说_0 提问者

应该没有了吧,你采纳的那位大神已经回答得很完美了。
2016-10-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不能在script中运行 startCount();而是要加setTimeout("startCount()",1000);

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信