为什么setInterval不能在我的jQuery插件中运行?

时间:2014-04-03 16:24:39

标签: jquery jquery-plugins setinterval

(function ( $ ) {

$.fn.gallery = function() {
    var images = $(this);
    return setInterval($.proxy(changeImage(images)), 500);
};

var i = 0;
var changeImage = function(images){
    i++;
    console.log(i);
    var _images = images;
    console.log(_images.length);
}


}( jQuery ));

$(function(){
    $('.home-gallery').gallery();
});

此代码为我提供了console.log但不会每500毫秒重复一次。我只获得了一次用于" i"的控制台。和#34; _images.length"。在此之后它不会重复。

编辑:我删除了$ .proxy位,但仍然没有重复

$.fn.gallery = function() {
    var images = $(this);
    return setInterval(changeImage(images), 500);
};

3 个答案:

答案 0 :(得分:1)

你无法传递类似的东西。你必须将它包装在一个匿名函数中。

你应该这样做:

setInterval(function () {
  changeImage(images);
}, 500);

你在这里不需要$.proxy,就像Rocket Hazmat在评论中所说的那样。

答案 1 :(得分:1)

你没有正确使用$.proxy,你甚至不需要它。只是,简单地说:

return setInterval(function(){
    changeImage(images)
}, 500);

答案 2 :(得分:-1)

两个答案都是正确的,但不完整。 setInterval()的第一个参数需要是函数或字符串,因此将它包装在匿名函数中是一个好的开始。

接下来,由于setInterval()在计时器后再次触发,因此范围会发生变化,变量“images”将不再存在。

你需要做这样的事情:

$.fn.gallery = function() {
    var images = $(this);
    return setInterval((function(images){
        return function() {
            $.proxy(changeImage(images));
        };
    })(images), 500);
};