这样写,startCount()为什么不能自动执行?

来源:8-5 计时器setTimeout()

steve_samuelson

2016-01-02 19:54

<!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);
  }
   startCount();

</script>
</head>
<body>
<form>
<input type="text" id="count" />
</form>
</body>
</html>

写回答 关注

3回答

  • 李晓健
    2016-01-02 20:14:51
    已采纳

    这是因为你的js在执行时,下面的input输入框还没有生成 ,所以就报错了,你可以这样试一下,把js代码放到下面

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>计时器</title>
    </head>
    
    </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>


    steve_...

    但是这样分析,为什么下面的代码又能够正常运行?大神再帮忙看下!

    2016-01-02 21:31:49

    共 2 条回复 >

  • 学海无涯乐悠悠
    2016-01-23 23:16:20

    我也是对这一点有疑惑,百度了半天,没找到,回头一看这里有。

    李晓健的回答很好,我这样理解:定义完成后直接调用startCount正如你所说,不正确,因为<body>部分还没有加载。所以直接调用不正确。按照这种理解,我再<input.....>后面增加了<script type="text/javascript">startCount();</script>竟然真的可以通过。

        这就说明,setTimeout();函数,是第一个参数的javascript语句延迟执行,而不是该函数下面的javascript语句也停下来等待执行。仅仅是延迟一段时间执行本函数语句内第一个参数内容。

        

  • steve_samuelson
    2016-01-02 21:31:59

    <!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);
    </script>
    </head>
    <body>
    <form>
    <input type="text" id="count" />
    </form>
    </body>
    </html>

    李晓健 回复李晓健

    上面说错了,是 startCount 这个方法在1s以后执行,不是js

    2016-01-02 21:41:34

    共 2 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

467395 学习 · 21877 问题

查看课程

相似问题