-2

私は、次の場所に投稿された非同期の each() 関数プラグイン コードを使用しています。

jQuery のヒントとコツ

うまく機能しますが、return を使用して実行中のコールバック関数を終了できないようです。または true を返します。その結果、「終了」の条件が満たされると、残りのすべての $.forEach 「ループ」実行が停止します。

プラグインは setTimeout ループ アプローチを実装しているため、既に実行中の setTimeout コールバック関数を終了する方法を知る必要があるだけでしょうか? ところで-大きなjson処理が発生している間、ブラウザのロックアップを避けるために、 for ループまたは $.each() の使用を避けています。ループを「バックグラウンド化」すると、UI のパフォーマンスが大幅に向上します。

$.forEach(json, 1000, function(idx,item) {
    if(some_condition) return true; //exit this timeout iteration

    //otherwise do something
});

jQuery.forEach = function (in_array, in_pause_ms, in_callback)
{
    if (!in_array.length) return; // make sure array was sent

    var i = 0; // starting index

    bgEach(); // call the function

    function bgEach()
    {
        if (in_callback.call(in_array[i], i, in_array[i]) !== false)
        {
            i++; // move to next item

            if (i < in_array.length) setTimeout(bgEach, in_pause_ms);
        }
    }

    return in_array; // returns array
};


jQuery.fn.forEach = function (in_callback, in_optional_pause_ms)
{
    if (!in_optional_pause_ms) in_optional_pause_ms = 10; // default

    return jQuery.forEach(this, in_optional_pause_ms, in_callback); // run it
};

どうもありがとう!

4

1 に答える 1

0

ドキュメントから:

コールバック関数が false を返すようにすることで、特定の反復で $.each() ループを中断できます。

編集:これは、カスタムにも適用されますforEach

于 2012-04-08T21:53:06.287 に答える