如果用户处于非活动状态,则运行jQuery超时函数

时间:2014-10-16 19:55:26

标签: javascript jquery

我有一个在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);
})

2 个答案:

答案 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()因为必须能够清除它。