javascript - 清除 setTimeout 问题

标签 javascript jquery timeout

我试图在按键命令后不到一秒内将“mouseactive”设置为 true,但如果在该时间段内按下该键,我想取消该操作。但是我似乎不知道如何做到这一点。这就是我所拥有的...

$(window).keydown(function(e) {
if (e.keyCode == 40) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
} else if (e.keyCode == 38) {
        e.preventDefault();
        mouseactive = false;
        clearTimeout(t);
        var t = setTimeout("mouseActive()",800);
}
});

function mouseActive() {
mouseactive = true;
}

但这不起作用,它不会将 mouseactive 设置回 true...任何人都可以告诉我我在这里做错了什么吗?

最佳答案

编辑:清理冗余代码。

更多编辑:确保您的 var t 是在任何闭包之外定义的,包括 $(document).ready。见下文,

var t = null;

$(document).ready(function () {
   //..below code except for var t = null
});

在处理程序外部声明 var t。

var t = null;
$(window).keydown(function(e) {
    e.preventDefault();

   if (e.keyCode == 40) {
        mouseactive = false;
   } else if (e.keyCode == 38) {
        mouseactive = false;
   }

   if (t != null) clearTimeout(t);
   t = setTimeout(mouseActive, 800);
});

function mouseActive() {
   mouseactive = true;
}

关于javascript - 清除 setTimeout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049052/

相关文章:

javascript - 将 div 发送到单独的页面进行打印

更新查询超出 MySQL 锁等待超时

javascript - mouseleave后jQuery返回原始状态

javascript - Html 将 json 值插入元素并将其转换为对象

javascript - 形状上的单击事件在kineticjs中不起作用

Jquery - 第一次单击时更改背景位置,第二次单击时重置

javascript - 使用YouTube Embed API更新带有视频标题的HTML文本

javascript - 如何向 URL 添加参数以触发 jQuery 在加载时运行函数

java - XML 模式验证时超时和挂起线程

http - 程序在执行 GET 请求时连续超时后停止