[英]Clearing setTimeout issues
我試圖在按鍵命令后不到一秒內將“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;
}
您的問題是 function 第二次運行時t
不在 scope 中。 您需要使t
成為全局變量。
var t;
$(window).keydown(function(e) {
if (e.keyCode == 40) {
e.preventDefault();
mouseactive = false;
clearTimeout(t);
t = setTimeout(mouseActive,800);
} else if (e.keyCode == 38) {
e.preventDefault();
mouseactive = false;
clearTimeout(t);
t = setTimeout(mouseActive,800);
}
});
function mouseActive() {
mouseactive = true;
}
PS 不要將字符串傳遞給setTimeout
,傳遞函數。 它在傳遞字符串時使用eval
。
你一直在重新聲明“t”,試試這個:
var t = null;
$(window).keydown(function(e) {
if (e.keyCode == 40) {
e.preventDefault();
mouseactive = false;
if(t != null)
{
clearTimeout(t);
}
t = setTimeout("mouseActive()",800);
} else if (e.keyCode == 38) {
e.preventDefault();
mouseactive = false;
if(t != null)
{
clearTimeout(t);
}
t = setTimeout("mouseActive()",800);
}
});
function mouseActive() {
mouseactive = true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.