我在每一行都有一个带有复选框的表格。当复选框被选中时,函数将循环更新每一行的状态。
这是我的工作小提琴:http: //jsfiddle.net/qJdaA/2/
我用来setInterval()
循环函数。由于表格是动态的,我不知道该列表将有多长。所以我将期间设置为变量index*4000
,如下所示:
$('#monitor').click(function () {
$('#monitor').attr('disabled','true');
bigloop=setInterval(function () {
var checked = $('#status_table tr [id^="monitor_"]:checked');
if (checked.index()==-1){
$('#monitor').attr('disabled','true');
}else{
(function loop(i) {
$('#monitor').removeAttr('disabled');
//monitor element at index i
monitoring($(checked[i]).parents('tr'));
//delay
setTimeout(function () {
//when incremented i is less than the number of rows, call loop for next index
if (++i < checked.length) loop(i);
}, 3000);
}(0)); //start with 0
}
}, index*4000);
然而,问题是它会等待第一个循环结束而不做任何事情。假设我在列表中有 10 个项目,那么它将等待 40 秒后再执行任务。我怎样才能消除这个问题?
然后,如果在 10 个项目中,只检查了 1 行,我必须等待 40 秒才能更新那一行,这是低效的。
我试图设置var clength = checked.length
并使用它来乘以 4000。但它不起作用。为什么以及我应该怎么做?