2010-10-28 54 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); }); 
}); 

這可以讓你不必檢查是否已經清除之前設定的時間間隔。而且,它可以確保您清除正確的時間間隔,而不是希望其他電話不會覆蓋您的變量。