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

时间:2013-03-29 21:19:18

标签: javascript jquery

有人可以帮助我纠正与setInterval相关的问题吗?我对JavaScript很新,我不确定这里有什么问题。我的页面中有这个块:

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();但是一旦执行此块,则在下一个时间间隔执行,而不是执行initialiseComment();再次,它跳回我的函数调用CreateComment();。我在这做错了什么?

1 个答案:

答案 0 :(得分:3)

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

要解决此问题,您应该改变:

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

到此:

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

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