问答详情
源自:8-5 计时器setTimeout()

为什么不能无限调用?是不是编辑器问题?

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>计时器</title>

<script type="text/javascript">

  var num=0;

  function startCount() {

    document.getElementById('count').value=num;

    num=num+1;

    document.write(num);

    setTimeout("startCount()",1000);

  }


</script>

</head>

<body>

<form>

<input type="text" id="count" />

<input type="button" id="kaishi" value="start" onclick="startCount()"/>

</form>

</body>

</html>


提问者:慕虎3994276 2018-08-25 10:40

个回答

  • EvilFrankie
    2018-09-23 07:01:27

    不可以使用 document.write 在这个 function 里面, js是一个从上到下的执行语言,第一次执行function时由于有document.write 的原因 原始html文件中的 <form></form>中的所有代码 被 function中的document.write(num); 抹去并替代 所以js 将无法找寻到 id 为 count 的 <input />标签, 从而无法将value 赋给 <input />.

  • 迈克尔_
    2018-09-03 17:18:57

    删去 document.write(num);

    如一楼所说,在你的实例里,已经实现了无限循环,只是文本框被覆盖了没有显示;

    详细点说,当你点击start按钮时,你的文本框和按钮消失了,只显示了1,并不是没有无限调用,而是被document.write(num)输出的“1”覆盖,而不显示了。

     不要随意使用document.write(),在HTML文档加载完成后,执行document.write()输出语句会覆盖所有已加载完成的HTML元素,只显示 document.write()输出内容——也就是案例里显示的“1”。


  • 跟我一起读_biang
    2018-08-27 14:40:51

    不要在function StartCount里 写任何输出 ,比如你写的document.write(num);  我们写StartCount函数的目的只是单纯的为了修改文本框的值,如果你写了输出语句,浏览器会显示输出语句的内容,但是文本框就不会显示出来了,你就看不到文本框中数字的变化。 

  • niuniu11
    2018-08-25 14:42:58

    settimeout就是用来调一次的   无限调用的要用setinterval