将循环的每次迭代延迟一定时间

时间:2011-12-29 07:16:22

标签: javascript jquery

JSFiddle: http://jsfiddle.net/KH8Gf/27/

代码:

$(document).ready(function()
{
 $('#expand').click(function()
    {
        var qty= $('#qty').val();

        for (var counter = 0; counter < qty; counter++)
        {
            $('#child').html($('#child').html() + '<br/>new text');            
        }
    });
});

如何将循环的每次迭代延迟一定时间?

我尝试了以下尝试失败:

setTimeout(function(){
$('#child').html($('#child').html() + '<br/>new text'); 
},500);

$('#child').delay(500).html($('#child').html() + '<br/>new text'); 

1 个答案:

答案 0 :(得分:9)

通过将操作放入本地函数,然后从setTimeout()调用该本地函数来实现延迟,这些情况似乎都是最好的。由于javascript中闭包的奇迹,本地函数可以访问上面级别的所有变量,因此您可以像这样跟踪循环计数:

$(document).ready(function() {
     $('#expand').click(function() {
          var qty = $('#qty').val();
          var counter = 0;
          var child = $('#child');

          function next() {
              if (counter++ < qty) {
                  child.append('<br/>new text');            
                  setTimeout(next, 500);
              }
          }
          next();
      });
});