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

私がやろうとしているのは、「スライド」クラスですべての要素を反復することですが、「現在の」変数の更新に問題があります。その値は常に 0 です。ネストされた jquery 関数内からグローバル変数を変更するにはどうすればよいですか?

4

1 に答える 1

4

.lengthDOMの準備が整う前にこの行が呼び出された場合、次のようになります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 に答える