2012-04-08 23 views
-2

私は非同期にに掲載それぞれ()関数プラグインのコードを使用しています:jQuery Asynchronous each()関数 - コールバックを終了する方法?

jQuery Tips and Tricks

それはうまく動作しますが、私はリターンを使用して、実行中のコールバック関数を抜けるように見えることはできません。またはtrueを返します。 "終了する"条件が満たされたときに残りの$ .forEach "ループ"実行がすべて停止されるということです。

プラグインはsetTimeoutループアプローチを実装しているので、すでに実行中のsetTimeoutコールバック関数を終了する方法を知る必要があるかもしれません。 BTW - 大きな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 
}; 

ありがとうございます!ドキュメントから

+0

[$ .eachをjqueryで分割するにはどうすればよいですか?](http://stackoverflow.com/questions/3944083/how-do-i-break-out-of-an-each-in- jquery) –

+0

あなたは 'false false;を返すだけで、ここでの問題は本当にわかりません。あなたのコードはin_arrayをループしなくなり、他のすべての戻り値、さらには' undefined'でも続けるべきです。 – Niko

+0

は偽を返しました。立ち入り禁止。あなたは$ .each()を考えなければなりません。私が提供したプラグコードを参照してください。 each()ループは関係しません。 – Inator

答えて

0

我々は コールバック関数がfalseを返すことによって、特定の反復での$ .each()ループを破ることができます。

編集:これは、お客様のカスタムforEachにも当てはまります。

+0

これは$ .each()ループではありません。 – Inator

+0

@Inator:でも、Matthewのソリューションを試しましたか? 'if(in_callback.call(in_array [i]、i、in_array [i])!== false)'コールバックから 'false'を返すと、次のようになります。 iterationsを停止します。 –

+0

この回答は正しいですが、説明が間違っています。 – Niko

関連する問題