如何设置setTimeOut以避免脚本在.each循环内无响应

时间:2014-01-05 03:23:57

标签: javascript jquery kendo-ui kendo-datepicker

如何添加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之后继续添加datepicker到其余输入。不知道怎么做。

1 个答案:

答案 0 :(得分:1)

这里的问题是.each本身是同步的。

  • 您可以将脚本卸载到webworkers
  • 或者使用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,但处理速度会明显变慢。