各行にチェックボックスがあるテーブルがあります。チェックボックスがチェックされると、関数はループして各行のステータスを更新します。
これが私の作業フィドルです: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
たが、うまくいきません。なぜ、どのようにすればよいのですか?