我在浏览器控制台中运行此JS代码,以4秒的间隔显示表中的某些名称。循环运行X次后,应该清除间隔。
$(document).ready(function() {
for(var j = 0; j < 2; j++) {
var refreshIntervalId = setInterval(function(){var td = $("tr td:first-child");
for (var i = 6; i < 26; i++){
console.log(td[i].innerText);
}},4000);
$("#idc4").click();
}
clearInterval(refreshIntervalId);
});
我已经在变量refreshIntervalId中保存了间隔ID,并且在使用此ID的循环后调用clearInterval函数,但是我的间隔一直在运行,在控制台中显示相同的名称。变量是否超出范围?或者浏览器控制台在这方面有一些限制吗?
答案 0 :(得分:0)
在他们被称为X次之后,你需要你的间隔停止。
因此,您需要稍微更改代码的逻辑。因为现在,你的for循环结合使用var
将在每次循环时替换你的intervalId
。
我介绍了一个intervalContext对象,它包含intervalId
及其被调用的次数。通过将其绑定到间隔,每个间隔都有自己的intervalContext。
// how many times will the interval be called :
var numberOfCalls = 3;
for (var j = 0; j < 2; j++) {
// initiating a new intervalContext
var intervalContext = {};
intervalContext.called = 0;
// storing the intervalId in the intervalContext so the interval can clear itself
intervalContext.intervalId = setInterval((function() {
// the intervalContext object will be referenced by 'this'
this.called++;
for (var i = 6; i < 26; i++) {
console.log("looping i = " + i);
}
if (this.called > numberOfCalls) {
console.log("Interval cleared. ID=", this.intervalId);
clearInterval(this.intervalId);
}
}).bind(intervalContext), 1000); // binding the interval to the intervalContext
console.log("Interval started. ID=" + intervalContext.intervalId);
}
&#13;