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 行だけがチェックされている場合、その 1 行だけを更新するために 40 秒待たなければならず、非効率的です。

4000で乗算するように設定して使用しようとしましvar clength = checked.lengthたが、うまくいきません。なぜ、どのようにすればよいのですか?

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 に答える