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

为什么不可以停止?

<!DOCTYPE HTML>

<html>

<head>

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

<title>计时器</title>

<script type="text/javascript">

   function clock(){

      var time=new Date();                  

      document.getElementById("clock").value = time;

   }

     var i =setInterval(clock,1000);

</script>

</head>

<body>

  <form>

    <input type="text" id="clock" size="50"  />

    <input type="button" value="Stop" onclick="clearInterval(i)" />

  </form>

</body>

</html>


正在回答

6 回答

亲测,是慕课网的网页问题。将代码复制下来,然后放在test.html文件中

http://img1.sycdn.imooc.com//5a6455840001bbe908730485.jpg

然后用任意浏览器打开,stop功能是正常的。


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

赞同楼上的说法,应该和慕课网的验证机制有关,我将代码复制进JSbin里面运行,就没有发现这个不能停止的问题。

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

补充:(在未刷新页面的情况下)每次提交后,setInterval()的返回值会累加,但每次只是生成两个计时器(i和i-1),因此function stop()中写成 

{

clearInterval(i); 

clearInterval(i-1);

}

比较恰当;      


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

分享一下自己debug的经历:

我最开始也遇到了和你一样的问题,无论是把clearInterval(i)写在onclick里,还是封装在function里都无法停止。

后来通过查看setInterval()的返回值发现,返回值从1开始自增(你可以通过点击自动运行按钮发现),但每次提交后,得到的结果是2 4 6...,因此是每次提交后都会出现两个计时器(可能和慕课网的提交机制有关),也就是说,你调用了clearInterval(i)只关闭了一个计时器,还有前一个计时器在调用clock函数。

例:在setInterval()方法下写一行document.write("id:"+i);第一次提交后页面打印出id=2;此时你clearInterval(i)关闭了返回值为2的计时器,但事实是有返回值为1的计时器生成了.为了能关闭到所有计时器,我写了一个for循环,遍历关闭返回值从1到i的计时器,同时用一个函数封装起来让Stop按钮调用,然后你会发现确实停止了

<!DOCTYPE HTML>

<html>

<head>

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

<title>计时器</title>

<script type="text/javascript">

   function clock(){

      var time=new Date();                

      document.getElementById("clock").value = time;

   }

    var i = setInterval("clock()",1000); 

    

    document.write("id:"+i);

    function stop(){

        for(var j =1;j<=i;j++){

        clearInterval(j);   

        }

    }

</script>

</head>

<body>

  <form>

    <input type="text" id="clock" size="50"  />

    <input type="button" value="Stop" onclick="stop()"  />

  </form>

</body>

</html>

结论:个人认为这跟慕课网提交按钮的实现有关系(学习前面课程同时打开过两个新窗口的同学举手?)

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

代码是没有问题的,可能是浏览器的问题,你提交后刷新一下再试试,提交后内容是保存的!

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

你根本就没有停止定时器啊,要加

clearInterval(i)

才停的


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

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468044    人
  • 解答问题       21891    个

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

进入课程

为什么不可以停止?

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