2013-06-26 69 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