0

各ループ内でスクリプトの無応答を回避するために setTimeOut を追加するにはどうすればよいですか?基本的に、このグリッドには多くの行があり、行には剣道の日付ピッカーで構成される列があります。問題は、グリッドに数回バインドした後、応答しないスクリプト ボックスが表示され、[続行] をクリックする必要があり、それが機能することです。

var j = 0;

$$('.dtInputs'),each(function (input){

    j++;
    input.kendoDatePicker();
    if(j > 500){
       if(j % 1000 = 0)
       {
           window.setTimeOut(arguments.callee, 1);
           return false;
       }
    }
});

問題は、これを見て、残りの入力に false を返した後、日付ピッカーを追加し続けるとは思わないことです。これを行う方法がわからない。

4

1 に答える 1

1

ここでの問題は、.eachそれ自体が同期していることです。

あなたの場合、これはうまくいくはずです

$.fn.asyncEach = function(callback){
  var i = 0;
  var elements = this;
  var timer = setInterval(function(){
    callback.call(elements[i],elements[i]);
    if(++i >= elements.length) clearInterval(timer);
  },0);
}

$('.dtInputs').asyncEach(function(){
  $(this).kendoDatePicker();
});

非同期動作を強制するためにタイマーを使用していることに注意してください。UI のブロックを防ぎますが、処理が大幅に遅くなります。

于 2014-01-05T03:28:10.787 に答える