正在清除setTimeout问题



我试图在按键命令后不到一秒钟将"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;
}

您的问题是t在函数第二次运行时不在作用域中。您需要将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;
}

附言:不要将字符串传递给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;
    }

最新更新