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

同一页面多倒计时定时器问题:jQuery仅作用于单个实例

解决多个倒计时定时器仅更新一个元素的问题

我看到你遇到的问题了——你的代码里所有倒计时最后都只更新最后一个.cd元素,这是因为**$id是全局变量**,在each循环的每次迭代中都会被覆盖。当setInterval的回调函数执行时,它引用的$id已经是最后一个元素的ID了,所以所有定时器都在更新同一个元素。

修复方案:使用局部变量或直接操作当前元素

我们可以把元素引用保存在each回调的局部作用域里,让每个定时器对应自己的目标元素,避免变量覆盖的问题。下面是修正后的完整代码:

JavaScript 代码

$(document).ready(function() {
  $(".cd").each(function(index, obj) {
    // 将目标日期和当前元素都绑定在当前迭代的作用域内
    var countDownDate = new Date($(this).attr('value'));
    var $targetElement = $(obj);

    // 每秒更新一次倒计时
    var timer = setInterval(function() {
      var now = new Date().getTime();
      var distance = countDownDate - now;

      // 计算天、时、分、秒
      var days = Math.floor(distance / (1000 * 60 * 60 * 24));
      var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
      var seconds = Math.floor((distance % (1000 * 60)) / 1000);

      // 直接更新当前元素的内容
      $targetElement.html(days + "d " + hours + "h " + minutes + "m " + seconds + "s ");

      // 倒计时结束时的处理
      if (distance < 0) {
        clearInterval(timer);
        $targetElement.html("EXPIRED");
      }
    }, 1000);
  });
});

HTML 代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="demo" class="cd" value="2018-06-10 18:00:00"></p>
<p id="demo2" class="cd" value="2018-06-11 18:00:00"></p>

关键改进说明

  • 把$targetElement保存在each回调的局部作用域中,每个定时器的回调都会引用自己对应的元素,不会互相干扰。
  • 使用jQuery的.html()方法代替原生的innerHTML,代码更简洁,也符合jQuery的使用习惯。
  • 避免了全局变量带来的作用域污染问题,每个倒计时逻辑都是独立运行的。

这样修改后,所有带有class="cd"的元素都会正确显示自己的倒计时了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:06:44