2013-06-26 65 views
-1

我知道這個問題已經彈出了很多,並相信我已經嘗試了所有的解決方案。我的問題與標題一樣簡單,clearInterval()函數未按預期工作。javascript間隔不被清除

var newsCheck_handle; 
var getNewsTime_handle; 
var originalTitle = document.title; //for title attribute update in newsCHeck function 
if (url === 'Home'){ 
    newsCheck_handle = setInterval(function(){newsCheck(originalTitle)},1000); 
    getNewsTime_handle = setInterval(function(){getNewsTime()},120000); 
    $("#refreshFeed").on('click', loadNew); //load new news on click 
} 
else {//stop functions if not on homepage 
    clearInterval(newsCheck_handle); 
    clearInterval(getNewsTime_handle); 
} 

我試圖在同一水平作爲間隔設置var的,而不是過,但不起作用。還試過window.clearInterval(),self.setInterval()

以防萬一需要。這是newsCheck函數。兩個人都會發生同樣的效果,他們的功能相當類似。

function newsCheck(originalTitle){ 
var objts = $(".newsItem:first").data("ts"); 
var objid = $(".newsItem:first").data("id"); 
var objevent = $(".newsItem:first").data("event"); 
var ids = $.makeArray(objid); //variable of IDS 
var ts = $.makeArray(objts); //variable of ts 
var event = $.makeArray(objevent); //variable of ts 

if (objts != null && objid != null){ 
    $.get("../AJAX/get_feed_updates.php",{ ID: ids, ts: ts, event: event },function(result){ 
     if (result > 0) { 
      document.title = '(' + result + ') ' + originalTitle; 
      if (result == 1){// no plurals 
       $("#refreshFeed").html(result + ' more news item.').fadeIn("slow"); 
      }  
      if (result > 1){ //plurals 
       $("#refreshFeed").fadeIn(500).html(result + ' more news items.'); 
      } 
     }//close if result 
    });//close get 
}// close if ts 
}//close function 
+1

開始的第一個片段是如何執行的?我有一個預感,間隔或者甚至沒有開始,或者你的條件是*永遠*爲真。 –

+0

@KevinB我已經使用'console.log()'來檢查。情況並非總是如此。如果我在else子句中記錄某些東西,它會記錄下如果條件不成立。間隔正在開始,因爲我已經記錄了函數內的某些內容。 –

+1

你能回答凱文的問題嗎?這是如何調用的/這個代碼位於何處。這可以連續多次調用「url === HOME」,然後纔會出現錯誤並只清除最後一個?這些變量在**函數中定義了**,這意味着它們在每次調用時都被清除了嗎? –

回答

0

也許你多次啓動它?所以你每次都會覆蓋定時器,而你只清除最後一個。

試試這個,因此一旦開始,如果它沒有

if (url === 'Home'){ 
    newsCheck_handle || (newsCheck_handle = setInterval(function(){newsCheck(originalTitle)},1000)); 
    getNewsTime_handle || (getNewsTime_handle = setInterval(function(){getNewsTime()},120000)); 
    $("#refreshFeed").on('click', loadNew); //load new news on click 
} 
else {//stop functions if not on homepage 
    clearInterval(newsCheck_handle); 
    clearInterval(getNewsTime_handle); 
    newsCheck_handle = getNewsTime_handle = undefined; 
} 
+0

不幸的是,這仍然有相同的效果 –

+0

嘗試每次打印計時器到控制檯,以確保您啓動並清除相同的一個。 – AntouanK