可以在 setInterval()内部调用 clearInterval()吗?

bigloop=setInterval(function () {
var checked = $('#status_table tr [id^="monitor_"]:checked');
if (checked.index()===-1 ||checked.length===0 || ){
bigloop=clearInterval(bigloop);
$('#monitor').button('enable');
}else{


(function loop(i) {
//monitor element at index i
monitoring($(checked[i]).parents('tr'));
//delay of 3 seconds
setTimeout(function () {
//when incremented i is less than the number of rows, call loop for next index
if (++i < checked.length) loop(i);
}, 3000);
}(0)); //start with 0
}
}, index*3000); //loop period

我有上面的代码,有时候能用,有时候不能。我想知道 如果清除间隔实际上清除计时器? ?,因为有这个 monitor按钮,将只有在禁用时,它是在 monitoring的功能。当单击一个名为 .outputRemove的元素时,我有另一个 clearInterval。请参阅下面的代码:

//remove row entry in the table
$('#status_table').on('click', '.outputRemove', function () {
deleted= true;
bigloop= window.clearInterval(bigloop);
var thistr=$(this).closest('tr');
thistr.remove();
$('#monitor').button('enable');


$('#status_table tbody tr').find('td:first').text(function(index){
return ++index;


});
});

但是它被启用了一段时间,然后又被禁用了

147084 次浏览

是的,你可以。你甚至可以测试它:

var i = 0;
var timer = setInterval(function() {
console.log(++i);
if (i === 5) clearInterval(timer);
console.log('post-interval'); //this will still run after clearing
}, 200);

在这个例子中,当i达到5时,这个定时器将被清除。