提供setInterval的ID并按ID清除

时间:2015-07-12 06:30:04

标签: javascript jquery

如何向setInterval()提供具体ID,然后按ID拨打clearInterval()

$('.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语句(因为" Online")并清除间隔,尽管它不应该。

所以我关注清除clearInterval特定行,直到那里"在线"找到文字。

4 个答案:

答案 0 :(得分:1)

您似乎希望确保跟踪每个对象的intervalIds。因此,使用jQuery .data功能将intervalId存储在对象本身上:

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

当您想要检索它时:

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

答案 1 :(得分:1)

您可以将clearC声明为对象{},在.id属性中创建并存储其ID,在setInterval()属性中创建.interval。通过这种方式,您可以通过获取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);
    }
  }
});

答案 2 :(得分: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的变量,性能没有真正的利润,但是不必要的代码。

答案 3 :(得分:0)

您的代码已经正确,所以我有点困惑。

非常简单。 id是setInterval的返回值。 setInterval不接受现有计时器的ID - 您期望它用于什么?

https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval