JS:setInterval和blur

时间:2010-10-28 20:50:37

标签: javascript

我有这个:

$(window).blur(function() {
    setInterval(function() {
        $.ajax({
            type: "POST",
            url: "imback.php",
            data: {
                mode: 'ajax',
                getUpdates: 'auto',
            },
            success: function(msg){
                document.title = msg + titleOrig;
            }
        });
    }, 35000);

工作正常。

虽然,如果你已经模糊,然后当你回头时,它将继续进行ajax调用,它不会在间隔35秒后停止发送ajax调用。

我该如何解决这个问题?     })

3 个答案:

答案 0 :(得分:2)

您需要在设置时存储间隔,然后在窗口焦点上清除它。像这样:

(function() {
    var interval = null;

    $(window).blur(function() {
        if (interval) clearInterval(interval);
        interval = setInterval(function() {
            $.ajax({
                type: "POST",
                url: "imback.php",
                data: {
                    mode: 'ajax',
                    getUpdates: 'auto',
                },
                success: function(msg){
                    document.title = msg + titleOrig;
                }
            });
        }, 35000);
    });

    $(window).focus(function() {
        if (interval) clearInterval(interval);
        interval = null;
    });
})();

编辑:我在代码周围添加了(function() { ... })()来封装“interval”变量,实际上使它对窗口模糊和焦点处理程序“私有”。

答案 1 :(得分:0)

看起来你需要在焦点上使用clearInterval()

答案 2 :(得分:0)

使用闭包:

$(window).blur(function() {
    tracktime = new Date();
    var iVal = setInterval(function() {
        $.ajax({
            type: "POST",
            url: "imback.php",
            data: {
                mode: 'ajax',
                getUpdates: 'auto',
            },
            success: function(msg){
                document.title = msg + titleOrig;
            }
        });
    }, 2000);

    $(window).focus(function() { clearInterval(iVal); });
});

这使您无需在清除之前检查是否已设置间隔。并且,它可以让您确保清除正确的Interval,而不是希望没有其他调用覆盖您的变量。