以下是我的代码的一部分:
$('#monitor').click(function(){
setInterval(function(){
$('#status_table tr [id^="monitor_"]:checked').each(function () {
monitoring($(this).parents('tr'));
});
},15000);
});
我想为选中复选框的表中的每一行调用函数monitoring
。如果我只有一个,它工作正常。但是当我有多个时,它会混乱,这意味着它不会在表格中附加正确的状态。
这是我的函数monitoring
:
function monitoring($row) {
fbType = $row.find('td:nth-child(3)').html();
fbNum = $row.find('td:nth-child(4)').html();
eachStatus =$row.find('td:nth-child(5)').attr('id');
$('#ptest').append(fbType + ' '+ fbNum+' '+ eachStatus +'<br>');
$.post('/request', {inputText: fbNum,key_pressed: fbType.toString()}).done(function (reply) {
if (reply == "on") {
$('#status_table tr #'+eachStatus).empty().append("on");
} else if (reply =="off") {
$('#status_table tr #'+eachStatus).empty().append("off");
}
});
}
如何延迟每行的函数调用?我尝试了以下
$('#monitor').click(function(){
setInterval(function(){
$('#status_table tr [id^="monitor_"]:checked').each(function () {
setTimeout(function(){
monitoring($(this).parents('tr'));
});
},1000);
},15000);
});
但div #ptest显示undefined
。
答案 0 :(得分:2)
替换以下行:
monitoring($(this).parents('tr'));
这个:
monitoring($(this).parent('tr'));
答案 1 :(得分:1)
你只是将他们推迟在一起,这就是为什么他们仍然在一起。你想要的是将他们彼此延迟。
$('#monitor').click(function(){
//a jQuery object is like an array
var checked = $('#status_table tr [id^="monitor_"]:checked');
(function loop(i){
//monitor element at index i
monitoring($(checked[i]).parent('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);
},15000);
}(0)); //start with 0
});
答案 2 :(得分:0)
试试这个:
setTimeout(function(){
monitoring($(this).closest('tr'));
},1000);