0

我在每一行都有一个带有复选框的表格。当复选框被选中时,函数将循环更新每一行的状态。

这是我的工作小提琴: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。但它不起作用。为什么以及我应该怎么做?

4

1 回答 1

0

示例如何删除间隔

<script>
var myVar=setInterval(function(){myTimer()},1000);
function myTimer()
{
  // do things here
}
function myStopFunction()
{
// clear interval here
clearInterval(myVar);
}
</script>

或者

<script>
    var myVar=setInterval(myTimer,1000);
    function myTimer()
    {
      // do things here
    }
    function myStopFunction()
    {
    // clear interval here
    clearInterval(myVar);
    }
    </script>
于 2013-05-07T04:57:33.447 回答