0

我在浏览器控制台中运行此 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);
});

我已将区间 ID 保存在变量 refreshIntervalId 中,并在循环后使用此 ID 调用 clearInterval 函数,但我的区间继续运行,在控制台中显示相同的名称。变量是否超出范围?还是浏览器控制台在这方面有一些限制?

4

1 回答 1

0

您需要在它们被调用 X 次后停止自己的间隔。

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

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

// 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);

}

于 2018-05-07T08:20:23.367 回答