You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Reset按钮正确重置setInterval计数器

问题原因

你之前的重置逻辑只修改了页面上显示的数字,没有修改真正存储计数数值的变量c——计数器累加的数值全存在这个变量里,它还保留着上次停止时的数值,下次启动自然会接着之前的数继续加。
另外你之前把重置显示的逻辑写进了myCounter函数里,这个函数是定时器每秒都会调用的计数函数,写在这里会导致每次计数刚加1就被改回0,完全无法正常计数。

正确实现方法

重置功能需要同时完成3个操作,缺一个都会出问题:

  • 先调用clearInterval(myTimer)停掉正在运行的计数定时器,避免重置过程中计数还在后台跑
  • 把存储计数的变量c赋值为0,这是保证下次计数从0开始的核心
  • 把id为demo的元素显示内容更新为0,让页面显示和实际计数数值同步
完整修正后的代码
<p id="demo">0</p>
<button onclick="myTimer = setInterval(myCounter, 1000)">
  Start counter!
</button>
<button onclick="clearInterval(myTimer)">
  Stop counter!
</button>
<!-- 新增重置按钮 -->
<button onclick="resetCounter()">
  Reset counter!
</button>
<script>
  var c = 0;
  var myTimer;
  function myCounter() {
    document.getElementById("demo").innerHTML = ++c;
  }
  // 单独写重置函数,不要和计数函数混写
  function resetCounter() {
    clearInterval(myTimer);
    c = 0;
    document.getElementById("demo").innerHTML = c;
  }
</script>
新手额外提示
  • 不要把不同功能的逻辑混写在同一个函数里:myCounter只负责每秒给计数加1、更新显示,重置逻辑要单独写新函数
  • 所有和计数相关的状态(这里就是存数值的c、存定时器id的myTimer),重置的时候都要同步处理,不能只改页面显示的“表面功夫”

内容的提问来源于stack exchange,提问作者codeshiba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 11:36:29