0

这是我的部分代码:

$('#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.

4

3 回答 3

2

替换您的以下行:

monitoring($(this).parents('tr'));

对于这个:

monitoring($(this).parent('tr'));
于 2013-05-03T07:34:30.180 回答
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

});
于 2013-05-03T07:34:41.123 回答
0

尝试这个:

setTimeout(function(){
    monitoring($(this).closest('tr'));
},1000);
于 2013-05-03T07:33:59.103 回答