怎么使jquery的each循环每执行一次,停一段时间再执行下一次循环呢

kangshaofei 2013-06-07 09:32:11
怎么使jquery的each循环每执行一次,停一段时间再执行下一次循环呢
,用了setTimeout,没效果。。如下是源代码
$(function(){
$("#btn").click(function(){
$.ajax({
type:"POST",
url:"Common.asmx/SendMsgs",
data:"{}",
contentType:"application/json",
dataType:"json",
success:function(data){
var jsonData=data.d;
var jsonTable=jQuery.parseJSON(jsonData);
$.each(jsonTable.jsonName,function(i,item){
var oldHtml="<span>我: "+item.id+"</span><br/>"+"<span>"+item.age+"</span>";
$("<p>").html(oldHtml).appendTo($("div")).css({color:"red"});
setTimeout("function(){return false;}",5000);
});

},
error:function(){
alert("error");
}

});
});
});

===========WEB服务==============
[WebMethod]
public string SendMsgs()
{
return "{\"jsonName\":[{\"id\":\"001\",\"age\":\"10\"},{\"id\":\"002\",\"age\":\"20\"},{\"id\":\"003\",\"age\":\"30\"}]}";
}
...全文
3684 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangshaofei 2013-06-07
  • 打赏
  • 举报
回复
,明白了,太感谢你了
md5e 2013-06-07
  • 打赏
  • 举报
回复 1
因为setTimeout不是一次只能执行一个,他是异步执行的 如果不用i的话就会是 setTimeout(...,1000) setTimeout(...,1000) setTimeout(...,1000) 1秒后三个同时执行,可能之间相差几微秒,用了i,就变成 setTimeout(...,0)//立刻 setTimeout(...,1000)//1秒后 setTimeout(...,2000)//2秒后
kangshaofei 2013-06-07
  • 打赏
  • 举报
回复
这个确实可以了,真牛X,感谢大牛!!!!!! 不过可以解释下,为什么要i*1000呢,直接1000确不行
  • 打赏
  • 举报
回复
 $.each(jsonTable.jsonName, function (i, item) {
                var oldHtml = "<span>我: " + item.id + "</span><br/>" + "<span>" + item.age + "</span>";
                setTimeout(function () {
                    $("<p>").html(oldHtml).appendTo($("div")).css({ color: "red" });
                }, i*5000);
            });
md5e 2013-06-07
  • 打赏
  • 举报
回复
setTimeout("$(\"<p>\").html(\"<span>我: " + item.id + "</span><br/>" + "<span>" + item.age + "</span>\").appendTo($(\"div\")).css({ color: \"red\" })", i * 1000); 这样应该没有问题吧
md5e 2013-06-07
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <script src="/Scripts/jquery-1.4.1.js"></script> <script> jQuery(document).ready(function () { jQuery("#a1 li").each(function (i, item) { setTimeout("jQuery(\"#a1 li\").eq(" + i + ").html(" + i + ")", i * 1000); }); }); </script> <body> <form id="form1" runat="server"> <div id="a1"> <ul> <li></li> <li></li> <li></li> </ul> </div> </form> </body> </html>
tianyichuanqi 2013-06-07
  • 打赏
  • 举报
回复
可以参考Jquery的 sleep()函数。

(function($)
{
	var _sleeptimer;
	$.sleep = function( time2sleep, callback )
	{
		$.sleep._sleeptimer = time2sleep;
		$.sleep._cback = callback;
		$.sleep.timer = setInterval('$.sleep.count()', 1000);
	}
	$.extend ($.sleep, {
		current_i : 1,
		_sleeptimer : 0,
		_cback : null,
		timer : null,
		count : function()
		{
			if ( $.sleep.current_i === $.sleep._sleeptimer )
			{
				clearInterval($.sleep.timer);
				$.sleep._cback.call(this);
			}
			$.sleep.current_i++;
		}
	});
})(jQuery);

kangshaofei 2013-06-07
  • 打赏
  • 举报
回复
还是不行,
md5e 2013-06-07
  • 打赏
  • 举报
回复
setTimeout($("<p>").html(oldHtml).appendTo($("div")).css({color:"red"}),i*5000 )
kangshaofei 2013-06-07
  • 打赏
  • 举报
回复
不行啊,还是一下出来3条数据呢
md5e 2013-06-07
  • 打赏
  • 举报
回复
setTimeout("function(){return false;}",i*5000);

62,240

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧