问答详情
源自:8-4 取消计时器clearInterval()

有一个bug,请指教

当连续点击开始开始按钮2次以上。停止按钮就失去作用了

提问者:慕客学渣会总瓢把子3201537 2016-06-14 11:55

个回答

  • 狼吻小红帽
    2016-06-14 14:50:44
    已采纳

        function mm(){
            clearInterval(i);
       i=setInterval("clock()",100); 
       }

    可以通过在开始事件开头设置关闭,保证每次点击开始,前一次定时器就已经关闭

  • 慕客学渣会总瓢把子3201537
    2016-06-14 20:46:35

    停不下来了

  • izore
    2016-06-14 16:11:05

    因为你的mm()函数实际上是添加一个循环计时器,你运行第一次添加一个,运行第一次添加第二个,而clear清除只能清除一个,再此添加一个之后又可以清除一个了。

    也就是代码刷新之前,clearInterval和clearTimeout只能用一次;而添加setInterval和setTimeout确可以无数次添加。

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>计时器</title>
    <script type="text/javascript">
    var times=0;
       function clock(){
        //  var time=new Date();               	  
          document.getElementById("clock").value = times;
    	  times++;
       }
        var i = setInterval(clock,1000);
    		
    	function stop(){
    		i = setInterval(clock,1000);
    	}
    
    </script>
    </head>
    <body>
      <form>
        <input type="text" id="clock" size="50"  />
        <input type="button" value="Stop" onclick="clearInterval(i)" />
         <input type="button" value="Start"  onclick="stop()"  />
      </form>
    </body>
    </html>

    你试一下上面的代码,初始运行时每秒+1,点击Stop停止计数。

    你再点击一下Start,运行为每秒+1;第二次点击变成每秒+1+1;第三次点击变成每秒+1+1+1。

    最后点击Stop,变成每秒+1+1;第二次点击还是每秒+1+1。

  • 狼吻小红帽
    2016-06-14 14:42:45

    我们知道定时器会返回一个值就是他的id,用于停止定时器。当你开始按钮连点两下时,获取到的id就是第二次点击开始的id,而第一次开始的id就无法获取,从而停止按钮只能停止第二次的时间,而第一次点击的开始时间会一直执行下去