如何向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
特定行,直到那里"在线"找到文字。
答案 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