如何在执行打字效果时禁用Enter键事件监听器并恢复?
解决打字效果执行期间禁用Enter重复触发的问题
方案一:用状态变量控制(推荐)
不用移除事件监听器,通过状态变量标记当前是否正在执行打字效果,触发前先检查状态即可:
// 初始化状态:未在执行打字效果 let isTyping = false; // 将事件处理函数定义为命名函数,便于维护 function handleEnterKeyup(event) { if (event.key === 'Enter') { // 如果正在打字,直接跳过 if (isTyping) return; // 标记为正在执行打字效果 isTyping = true; getResult(document.getElementById("input").value); } } document.addEventListener("keyup", handleEnterKeyup); // 重要:在打字效果完全结束后,需要把状态重置为false // 比如在getResult函数内的打字动画完成回调里添加: // isTyping = false;
方案二:移除/重新绑定事件监听器
如果坚持要用移除监听器的方式,必须把事件处理函数定义为命名函数(匿名函数无法被removeEventListener识别):
function handleEnterKeyup(event) { if (event.key === 'Enter') { // 移除监听器,防止重复触发 document.removeEventListener("keyup", handleEnterKeyup); getResult(document.getElementById("input").value); } } document.addEventListener("keyup", handleEnterKeyup); // 同样,在打字效果完成后,重新绑定监听器 // 比如在getResult的打字动画结束逻辑里添加: // document.addEventListener("keyup", handleEnterKeyup);
核心注意点
两种方案的本质都是打字开始时锁定触发入口,结束后解锁。你需要找到打字效果完成的时机(比如动画回调、定时器结束处),在该节点执行状态重置或监听器重新绑定操作。
内容的提问来源于stack exchange,提问作者Filip Mráz
相关产品推荐
相关产品推荐

