1

現在、このように設定していますが、

var elements = $('#one, $two, #three, #four, #six');

var _temp = 0;
elements.hide(0, function(){
    /* by default, the callback will be performed to
       every single element in stack */

    _temp++; // increment temporary cache

    // perform actual callback only on last in list
    if (_temp == elements.length) {
        // do stuff
    }
});

しかし、それは間違っていると感じます。なぜなら、241行下の別のコールバックに対して同じことをしたい場合は、リセットする必要が_tempあり、グローバル変数は面倒です。

どうすればこれを単純化できますか?

4

3 に答える 3

3

考えられる方法の 1 つは、クロージャーを使用することです。

var elements = $('#one, $two, #three, #four, #six');

elements.hide(0, (function(){
    var _temp = 0;
    return function(){
        _temp++; // increment temporary cache

        // perform actual callback only on last in list
        if (_temp == elements.length) {
            // do stuff
        }
    };
})());

このパターンをより頻繁に使用したい場合は、コールバックを返す関数を作成できます。

.hide()また、最初の引数として期間があることに注意してください。

于 2012-07-18T07:55:00.900 に答える
1

関数で静的変数を使用してみてください。

于 2012-07-18T07:59:05.063 に答える
0

一時変数を使用しない別の方法もあります。一部の人にとっては少し読みにくい場合があり、選択内容を変数内に保存する必要がありますが、次のようになります。

elements.hide(0, function(){
    // if last callback (compare raw DOMElements, because jQuery object aren't somehow similar)
    if ($(this)[0] === elements.last()[0]) {
        // do stuff
    }
});

いくつかの行を絞り込んで、トリックを行います。

于 2012-07-18T08:16:48.197 に答える