2015-07-12 51 views
4

如何提供具体的ID给setInterval(),然后通过ID调用clearInterval()提供setInterval的ID并通过ID清除

$('.notify').each(function() { 
    var chkr = $(this).find('span').text(); 

    if (chkr == 'Offline') { 
     if (typeof(clearC) !== 'undefined') { 
      clearInterval(clearC); 
     } 

     // how can i provide the ID of "clearC" below 
     clearC = setInterval(function() { 
      soundOn(); 
     }, 500); 
    } 
    else { 
     //how can i clear "clearC" with the ID provided in if statement 
     if (typeof(clearC) !== 'undefined') { 
      clearInterval(clearC); 
     } 
    } 
}); 

问题是当if声明执行然后声音继续。但对于下一行,它输入else声明(因为“在线”)并清除间隔,尽管它不应该。

所以我的问题是清除clearInterval为特定的行,直到找到“在线”文本。

+0

什么不工作? (设置/清除间隔中没有ID) – Amit

回答

1

这种情况怎么样?

$('.notify').each(function() { 
    var $this = $(this); 
    var intervalID = $this.data('intervalID'); 
    var chkr = $this.find('span').text(); 

    clearInterval(intervalID); 
    if (chkr === 'Offline') { 
     $this.data('intervalID', setInterval(function() { soundOn(); }, 500)); 
    } 
}); 

P.S.您不需要检查undefined上带有间隔ID的变量,但是在性能上没有真正的利润,但是不必要的代码。

+1

谢谢了。最后这个工作就像一个魅力。但为什么你编辑?并移除“else”?它是正确的 –

+0

@RejoanulAlam,因为它只是更少的代码。你在两个'if'情况下应用'clearInterval(intervalID)'。 –

+0

是的,没错。了解 –

1

好像你要确保你跟踪intervalIds每个对象的。因此,存储在对象本身的intervalId,使用jQuery。数据功能:

clearC = setInterval(function() { soundOn(); }, 500); 
$(this).data("intervalId", clearC); 

当你想找回它:

clearInterval($(this).data("intervalId")); 
+0

没有帮助。首先我需要为每个'setInterval'设置一个ID,然后我可以存储它。 –

+0

查看我所做的更改。 –

1

你可以声明clearC为对象{},创建和存储其.id属性中的ID,以及.interval属性中的setInterval()。通过这种方式,您可以通过获取clearC.id来检查其ID。

var clearC = {}; 
// ... 
$('.notify').each(function(){ 
    var chkr = $(this).find('span').text(); 

    if(chkr == 'Offline'){ 
    if(typeof(clearC.interval) !== 'undefined'){ 
     clearInterval(clearC.interval); 
    } 

    // this way you can provide the ID of "clearC.interval" below 
    clearC.id = "your-id"; 
    clearC.interval = setInterval(function() { 
     soundOn(); 
    }, 500); 
    } 
    else{ 
    // this way you can clear "clearC.interval" with the ID provided in if statement 
    if(typeof(clearC.interval) !== 'undefined'){ 
     if (clearC.id === "your-id") 
     clearInterval(clearC.interval); 
    } 
    } 
}); 
+0

谢谢,有一个想法。即时通讯工作 –

+0

这只适用于一个setInterval,它不适用于多个setInterval调用,因为我们在这里有一个循环。 –