在Chrome上的浏览器控制台中调用clearInterval

时间:2018-05-07 08:10:39

标签: javascript jquery html google-chrome browser-console

我在浏览器控制台中运行此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函数,但是我的间隔一直在运行,在控制台中显示相同的名称。变量是否超出范围?或者浏览器控制台在这方面有一些限制吗?

1 个答案:

答案 0 :(得分:0)

在他们被称为X次之后,你需要你的间隔停止。

因此,您需要稍微更改代码的逻辑。因为现在,你的for循环结合使用var将在每次循环时替换你的intervalId

我介绍了一个intervalContext对象,它包含intervalId及其被调用的次数。通过将其绑定到间隔,每个间隔都有自己的intervalContext。

&#13;
&#13;
// 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;
&#13;
&#13;