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

为什么JS中setInterval仅首次运行正常,后续触发执行间隔越来越短?

问题原因
  • 误用setInterval:你需要的是延迟1秒执行一次清空操作,而setInterval会每隔1秒重复执行清空,不符合需求
  • 未清理定时器:每次keyup事件触发都会生成新的定时器,旧定时器没有被销毁,多个定时器同时运行就会导致清空操作触发频率越来越高,看起来就是间隔变短
修复方案

我们改用setTimeout实现,同时每次按键时先清除之前的待执行定时器,重置计时:

var personTyping = document.getElementById('typingArea');
var isTypingPlace = document.getElementById('isTypingPlace');
// 存储定时器ID,方便清理
var typingTimer = null;

personTyping.addEventListener('keypress', () => {
  // 每次按键先清除之前的待清空定时器
  clearTimeout(typingTimer);
  isTypingPlace.innerHTML = "正在输入...";
})
personTyping.addEventListener('keyup', () => {
  // 每次按键抬起后,重置1秒倒计时
  clearTimeout(typingTimer);
  typingTimer = setTimeout(() => {
    isTypingPlace.innerHTML = "";
  }, 1000)
})

对应HTML部分保持原有逻辑即可:

<html lang="en" dir="rtl">
<div id="typingArea"><input type="text"></div>
<p id="isTypingPlace"></p>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:15:03