0

我对这段代码有疑问:

var elements;
var current = 100;

$(document).ready(function() {
        elements =  = $('.slide').length;
        iterate();
});

function iterate() {
        $('.slide').eq(current).hide().queue(
                function() {
                        if (++current >= elements) { current = 0; }
                        $('.slide').eq(current).show();
                        $(this).dequeue();
                }
        );

        // Call this function again after the specified duration
        setTimeout(iterate, 1000);
}

我想要做的是用'slide'类迭代所有元素,但我在更新'current'变量时遇到问题。它的值始终为 0。如何从嵌套的 jquery 函数中修改全局变量?

4

1 回答 1

4

如果在 DOM 准备好之前调用此行,.length则为0

var elements = $('.slide').length;

这意味着条件if将始终是true

if (++current >= elements) { current = 0; }

你可以像这样修复它:

var elements;
var current = 100;

$(document).ready(function() {
    elements = $('.slide').length;
    iterate();
});

此外,这有点奇怪.queue()。没有什么需要排队的。

我会这样修改它:

function iterate() {
    var slide = $('.slide').eq(current).hide();
    if (++current >= elements) { current = 0; }
    $('.slide').eq(current).show();

    // Call this function again after the specified duration
    setTimeout(iterate, 1000);
}
于 2012-10-17T22:09:06.390 回答