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

JavaScript DOM测验计时器:计时到0后进入负数问题排查

问题分析与解决

你的计时器跑到负数的核心问题出在停止条件的判断上:

if (secondsLeft === 0 && quizQuestions[5]) {

这个条件要求同时满足两个条件才会触发计时器停止:

  • secondsLeft等于0
  • quizQuestions[5]为真值(比如数组长度足够、该位置元素不是null/undefined/false等)

如果quizQuestions数组长度不足6,或者索引5的元素是假值,这个if语句就不会执行,clearInterval也就不会被调用,计时器会继续执行secondsLeft--,自然就变成负数了。

修正方案

把判断条件简化,只保留时间相关的判断(用<= 0是为了覆盖意外情况导致secondsLeft直接跳到负数的场景),去掉多余的quizQuestions[5]判断:

let secondsLeft = 60;

function setTime() {
  let timerInterval = setInterval(function() {
    secondsLeft--;
    // 先判断是否超时,再处理后续逻辑
    if (secondsLeft <= 0) {
      timeEl.textContent = "Quiz over";
      clearInterval(timerInterval);
      dNone();
      questionText.innerHTML = "Do you wanna give it another try?";
      return; // 提前退出,避免执行后续的剩余时间文本更新
    }
    timeEl.textContent = secondsLeft + " seconds left till Quiz Ends";
  }, 1000);
  
  // 保留这个超时兜底,防止上面的判断逻辑失效
  setTimeout(function() {
    clearInterval(timerInterval);
  }, 61000);
}

另外调整了代码顺序:先判断是否超时,再更新剩余时间文本,避免最后一次循环还显示负数的时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:02