0

如何添加 setTimeOut 以避免每个循环内的脚本无响应?,基本上有这个网格,我有很多行,并且行有一个由 kendo datepicker 组成的列。问题是,在绑定到网格几次后,我得到了无响应的脚本框,然后我必须单击继续,它会起作用:

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本身是同步的。

  • 您可以将脚本卸载给网络工作者
  • 或者使用自己制作一个异步循环setInterval

在你的情况下,这应该工作

$.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 回答