仅在load()之后运行一次函数

时间:2015-07-03 13:41:45

标签: javascript jquery

我正在使用jquery load()来加载多个项目。一切都很好。

for(i = 0; i<item.length; i++){
   $( '#parent'+i).load('file'+i+'.html',function(){
       customFunctions();
   });
}

我的问题是,我需要在完成加载后运行customFunctions()。我上面的代码多次运行它。如何在所有文件完成加载后运行customFunctions()一次?

5 个答案:

答案 0 :(得分:4)

这是关于做出承诺,但你也可以这样做:

var all_loaded = 0;

for(var i = 0; i < item.length; i++){
   $( '#parent' + i).load('file' + i + '.html',function(){
      ++all_loaded == item.length && customFunctions();
   });
}

//++all_loaded: mean It is sum +1 when a file is loaded

因此当all_loaded等于item.length时,函数会在最后加载。

答案 1 :(得分:1)

添加计数器并在加载每个文件时更新它。当计数器的当前值等于您要加载的总文件数时,请调用您的函数;

答案 2 :(得分:0)

for(var i = 0; i<item.length; i++){
   $( '#parent').load('file.html',function(){
      if(i==(item.length-1))
          customFunctions();
   });
}

这应该有用。

答案 3 :(得分:0)

试试这个:

只有当所有加载请求都成功时,您的函数才会运行

var item = {length:12};
runfunction = 0;
for(i = 0; i<item.length; i++){
   $( '#parent').load('t.html',function(responseText, textStatus, XMLHttpRequest){

      if (textStatus == "success") {
            runfunction++;
       }
       /* you can write three line of code any where even after for loop according to your requirements*/
       if(runfunction == item.length ){
        customFunctions();
       }
   });
}

function customFunctions(){
 alert(1);
}

答案 4 :(得分:0)

有很多选择。

您可以在循环中跟踪:

var loadedCount = 0;
for(i = 0; i<item.length; i++){
  $( '#parent').load('file.html',function(){
    loadedCount++;
    if (loadedCount === item.length) {
      customFunctions();
    }
  });
}

这将完成这个具体案例的工作。此仅在此约束设计中起作用,您可以在其中知道您调用了多少次并且可以信任/相信您的AJAX请求都不会失败。因此,它不是一个非常稳定的设计。