javascript - setInterval 在第一次迭代后退出。请帮我纠正这个片段?

标签 javascript jquery

有人可以帮我纠正与 setInterval 相关的问题吗?我对 JavaScript 还很陌生,我不确定这里出了什么问题。我的页面中有这个 block :

GlobalTicker.prototype.TickElements = function () {
    this.timer = setInterval(this.initializeElement.apply(this) , 1000);
};
GlobalTicker.prototype.initializeElement = function () {
    for (var i = 0; i < this.tickerElements.length; i++) {
        var existingRun = this.tickerElements[i].secs;
        var elementId = $('#' + this.tickerElements[i].id + ' .comment-editor').find('.ticker');
        existingRun -= 1;
        $(elementId).text(existingRun);
        if (existingRun === 0) {
            $(elementId).remove();
            this.tickerElements.splice(i, 1);
            if (this.tickerElements.length == 0) clearInterval(this.tickerElements.timer);
        }
    }
};

然后在代码中的某个地方,我在函数中进行了此调用

var objTicker = new GlobalTicker();
CommentManagement.prototype.createComment = function (domObject) {
    objTicker.TickElements();
};

这个函数调用实际上调用了setInterval函数并运行第一次迭代并跳转到initialiseComment();但是一旦执行了这个 block ,在下一个时间间隔,它不会再次执行 initialiseComment();,而是跳回到我的函数调用 CreateComment();。我在这里做错了什么?

最佳答案

setInterval() 需要函数引用。您正在调用函数本身,并将执行函数的返回结果(未定义)传递给 setInterval()。由于该返回值不是函数,因此没有可供 setInterval() 调用的回调函数。因此,您的方法在您第一次调用时执行了一次,但在间隔时间内无法调用。

要修复它,您应该对此进行更改:

this.timer = setInterval(this.initializeElement.apply(this) , 1000);

对此:

var self = this;
this.timer = setInterval(function() {self.initializeElement()}, 1000);

请注意,setInterval() 回调中 this 的值也将与您想要的值不同,因此您想要的值会保存在 中self 因此可以从中引用它。在这种情况下,也无需使用 .apply(),因为调用对象上的方法会根据需要自动设置 this 指针。

关于javascript - setInterval 在第一次迭代后退出。请帮我纠正这个片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711563/

相关文章:

jquery-ui - Jquery droppable获取多个draggable id

c# - 在 jquery 中启用可排序

c# - 使用 Jquery 禁用 ASPX 页面上的后台或所有控件

javascript - 分屏中的站点容器

javascript - 使用 Math.max 和 Math.min 从数组中删除最大和最小数字

javascript - 如何在第一次迭代时设置一个值然后从不在 Javascript 中更改它

javascript - 如何更改 svg 内文本元素的属性?

javascript - 是什么在我的标记中强制使用内联样式?

javascript - Canvas 外推页脚

javascript - 单击后退按钮时重新加载页面