我正在尝试使用以下代码每秒移动一次轮播元素:

function moveCarousel(){
        var x = $('.carousel_title.active');
        var next = x.next();
        x.removeClass('active');
        next.addClass('active');

    }

    setInterval(moveCarousel(),1000);


但是有两件事似乎出错了:


第一个周期即刻发生
没有进一步的循环发生


我哪里出问题了?

最佳答案

您应该删除最后一行的花括号

function moveCarousel()
{
        var x = $('.carousel_title.active');
        var next = x.next();
        x.removeClass('active');
        next.addClass('active');

    }

    setInterval(moveCarousel,1000);


在这种情况下,您要将一个函数(moveCarousel)传递给另一个函数(setInterval),因此该函数将不被执行(这就是括号的含义),而是像对象一样被传递。

您的原始代码将undefined(因为moveCarousel不返回任何内容)传递给setInterval函数-而setInterval接受一个函数作为它的第一个参数-不是undefined

您也可以这样做:

setInterval(function () { moveCarousel(); }, 1000);


在这里构造一个匿名函数来调用moveCarousel。

08-15 18:20