jQuery如何使for循环等待加载()完成
jQuery how to make for loop wait until load() is completed
我需要在"for"循环中加载主题,但循环是在主题开始加载之前完成的。有人能帮我吗?HTML代码很好,唯一的问题是jQuery和Javascript。
var newTop = $("#invisForum").find('a:not(:has(span))'); //find every link which does not include span
var odkazy = new Array();
for (var i = 0; i < noveTop.length; i++) {
odkazy[i] = $(noveTop[i]).attr('href'); //get the href attribute from every link
}
if (odkazy.length!=0){
$("#unreadForum").css("visibility","visible"); //if there is any link, make table for links visible
}
for (var x = 0; x < odkazy.length; x++) {
alert("The x in LOOP is "+ x);
$("#spravneOdkazy").load(odkazy[x]+' td[style="white-space:normal;"]',function(){
topicy = $("#spravneOdkazy").find("td").find('img[alt="Uzavřeno"]');
if (topicy.length>0){
$("#unreadTable").find("tbody").append("<tr><th>"+$("#invisForum").find("span:nth-child("+x+")").text()+"</th></tr>");
}
for (var y = 0; y < topicy.length; y++) {
$(topicy[y]).parent().find("img").css("vertical-align","middle");
$("#unreadTable").find("tbody").append("<tr><td>"+$(topicy[y]).parent().html()+"</td></tr>");
}
alert("The X in LOAD is " +x);
});
}
我希望输出为
LOOP中的X为0
LOAD中的X是0
LOOP中X是1
LOAD中的X为1
LOOP中的X是2
LOAD中X是2
LOOP中的X为3
LOAD中的X是3
但当前输出是
LOOP中的X为0
LOOP中X为1
LOOP中X为2
LOOP中的X为3
LOAD中的X是0
LOAD中的X是1
LOAD中的X为2
LOAD中X为3
因为load()
函数需要一段时间才能加载,并且循环在第一次加载()完成之前完成。我可以让循环等待,直到每一个load()
完成,然后继续吗?
您可以尝试创建一个递归函数,而不是在.load()回调中调用自己的实际循环。
function loop(array,x){
if( isNaN(x) ) x = 0;
console.log("loop: "+x);
$("element").load(array[x],function(){
console.log("load: "+x);
//Do your stuff here
if( array.length > x+1 ) loop(array,x+1);
});
}
var array = ["link1","link2","link3"];
loop(array);
然后,这个函数将像一个循环一样运行,只是它将等待.load()的回调后再运行。
您试图强制Javascript以同步方式工作,同时使用jquerys异步加载函数。
在这种情况下使用异步编程有一个很好的原因:因为与程序中的所有其他步骤相比,在互联网上加载数据需要很长时间。
我建议你不要试图强迫这个程序以你习惯的同步方式运行。相反,你应该尝试理解并使用异步编程。任何一本关于Javascript的好书都会教你这方面的基础知识。为了更深入地研究,我推荐伯纳姆,T.2012。ASYNC JavaScript:用更少的代码构建更具响应性的应用程序。务实的书架。
相关文章:
- jQuery加载完成事件不起作用
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- Google Chrome扩展程序可以检测所有脚本何时加载完成吗
- 如何在页面加载完成后暂停JavaScript
- 隐藏元素直到加载完成(ng斗篷不是我需要的)
- ajax外部url加载完成后调用jquery函数
- 在页面加载完成之前,使用URL参数运行JavaScript
- AngularJS - ngRoute - 视图加载完成后的回调
- 禁用浏览器按钮,直到页面加载完成
- Kendo UI加载完成事件
- 是否可以创建一个require.js模块,该模块在加载完成后自行决定
- 尝试在轮播中显示Instagram图像 - 如何仅在图像加载完成后加载轮播
- 如何使jQuery加载在其他加载完成时开始
- C# 在页面加载完成后下载 HTML 字符串
- 窗口.位置.重新加载完成
- 页面加载完成后执行 JavaScript
- 在页面加载完成后执行 javascript
- Chrome扩展,仅在当前页面加载完成后才启动功能
- 外部小部件加载完成JS命令的执行
- iframe加载完成后,加载指示器将保持在Firefox中