2013-08-27 135 views
0

但是,我有下面的脚本正在工作,我希望每个数组项在循环继续之前显示几秒钟。这怎么能在JQuery中完成?在JQuery中延迟For循环

<script> 
$(document).ready(function() { 
    $("#x").click(function() { 
     $.get('testfile.htm', function (data) { 
      var i = 0; 
      var mydata = []; 

      $('#dc').html(data); 

      $('#dc').find('div').each(function() { 
       mydata[i] = $(this).text() 
       i++; 
      }); 

      for (id = 0; id < mydata.length; id++) { 
       $('#res').text(mydata[id]); 
      } 
     }) 
    }); 
}); 
</script> 
+3

你要么使用循环来设置的'window.setTimeout's负载,或者你不使用循环,但用'window.setTimeout'有点像递归。 –

+0

一些建议:在你的循环中将'id'声明为'var id = 0',否则你最终会在所有用法中使用一个全局的'id'变量实例。 – doogle

回答

1

东西试试这个:

for (var id = 0; id < mydata.length; id++) { 
    (function (id) { 
     setTimeout(function() { 
      $('#res').text(mydata[id]); 
     }, 3000 * id); // Change 3000 to the delay you want, in ms 
    }(id)); 
} 

实际上,每个setTimeout调用返回瞬间,让你由3000  毫秒(或左右)增加每个延迟因此每个.text呼叫间隔至少3000  毫秒。

0

使用的setTimeout()

这不是jQuery的,你问,但它能够完成任务。下面是我为项目创建的一些代码示例。

setTimeout(function() { 
      Scroller.Animate("down") 
     }, 10000); 

10000是10秒。

所以,你会想去做

 for(id = 0; id < mydata.length; id++) 
     { 
      setTimeout(function(){ 
       $('#res').text(mydata[id]) 
      }, 5000); 
     } 
+0

我添加了你提供给我的代码,它没有做任何事情。我在它之前添加了一个警报,以查看循环是否正在运行。它不喜欢setTimeout() –

+0

你可能会做你的代码jsfiddle吗?我可能能够以更多的方式提供帮助。 – BenM

+0

我只是将警报添加到setTimeout()函数中,它只返回数组中的最后一项 –

3

您可以利用fx队列和简单的queue来更新所有文本更改,并在每次更改之间延迟一段时间。这也可以让你无缝地使用动画,如fadeOutfadeIn

jQuery的方法:
$.each(mydata, function (i, val) { 
    $('#res').queue(function (n) { 
     $(this).text(val); 
     n(); 
    }).delay(1000); //how many miliseconds between text changes 
    //or with a simple fade in-out effect: 
    //}).fadeIn().delay(1000).fadeOut(); 
}); 
原:
for (id = 0; id < mydata.length; id++) { 
    $('#res').text(mydata[id]); 
}