2010-10-28 53 views
0

我有这样的:JS:setInterval的和模糊

$(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调用。

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

回答

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() { ... })()周围的代码封装“间隔”变量,本质上使其成为“私人”的窗口模糊和集中处理。

0

看起来你需要给clearInterval()焦点

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); }); 
}); 

这可以让你不必检查是否已经清除之前设定的时间间隔。而且,它可以确保您清除正确的时间间隔,而不是希望其他电话不会覆盖您的变量。