我有一个在30分钟后运行的jQuery超时脚本,然而,它一直在运行,我只希望它运行,如果用户在这段时间内处于非活动状态。我该怎么做呢?
$(function(){
var timeout = 30000;
$(document).on("mousemove", function(){
clearTimeout(timeout);
})
setTimeout(function(){
$.post("../php/logout.php", {}, function(response){
if(response.success == "1"){
location.replace("../pages/timed_out.php");
}
}, "json");
}, timeout);
})
答案 0 :(得分:1)
您应该通过使用setTimeout
中的超时ID(可以作为clearTimeout
函数结果获取)并再次设置超时来清除超时:
$(function()
{
var timeout = 30000;
var timer = 0;
setTimer();
$(document).on("mousemove", function()
{
clearTimeout(timer);
setTimer();
});
function setTimer()
{
timer = setTimeout(function()
{
$.post("../php/logout.php", {}, function(response)
{
if (response.success == "1")
{
location.replace("../pages/timed_out.php");
}
}, "json");
}, timeout);
}
});
答案 1 :(得分:1)
如果您想重置“超时”,那么只更改超时变量就不会做任何事情。您需要使用clearTimeout()
实际清除超时要做到这一点,这是你需要做的......
function restartTimeout() {
timeoutHolder = setTimeout(function(){
$.post("../php/logout.php", {}, function(response){
if(response.success == "1"){
location.replace("../pages/timed_out.php");
}
}, "json");
}, 30000);
}
$(function(){
$(document).on("mousemove", function(){
clearTimeout(timeoutHolder);
restartTimeout();
})
restartTimeout();
})
请注意我分配了一个变量来保持' setTimeout()
因为必须能够清除它。