从jquery嵌套函数更新全局变量

时间:2012-10-17 22:03:18

标签: javascript jquery scope nested

我对这段代码有疑问:

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函数中修改全局变量?

1 个答案:

答案 0 :(得分:4)

如果在DOM准备好之前调用此行,.length0

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);
}