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

点击按钮启动实时时钟后时间立即消失的技术问题

问题原因

你的代码里,每次调用updateTime函数时都会重新创建一个setInterval定时器。点击按钮后,第一次执行updateTime会显示时间并创建第一个定时器;1秒后定时器触发再次调用updateTime,又会创建第二个定时器,以此类推,大量重复的定时器会导致DOM更新混乱,出现时间显示异常(比如看起来“消失”)的问题。

修复方案

有两种常见的修复方式:

方式一:将定时器创建放在按钮点击事件中

让updateTime只负责更新时间,点击按钮时只创建一次定时器,避免重复创建:

function updateTime() {
    const time = new Date().toLocaleTimeString();
    document.getElementById('showtime').textContent = time;
}

document.getElementById("btnclock").addEventListener("click", function() {
    // 先更新一次时间,避免等待1秒才显示
    updateTime();
    // 每秒调用一次updateTime
    setInterval(updateTime, 1000);
});

方式二:使用定时器ID避免重复创建

如果需要防止多次点击按钮创建多个定时器,可以用变量保存定时器ID,点击时先清除已有定时器:

let timerId = null;

function updateTime() {
    const time = new Date().toLocaleTimeString();
    document.getElementById('showtime').textContent = time;
}

document.getElementById("btnclock").addEventListener("click", function() {
    // 清除已有的定时器,避免重复创建
    if (timerId) {
        clearInterval(timerId);
    }
    updateTime();
    timerId = setInterval(updateTime, 1000);
});

补充说明

  • 推荐使用textContent代替innerHTML,因为这里只是显示纯文本,textContent更安全且性能更好。
  • 变量time不需要声明在全局作用域,放在函数内部即可,避免全局变量污染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:40:56