簡體   English   中英

清除 setTimeout 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM