2010-06-13 61 views
1

Iv'e刚刚开始一个新的WordPress博客,我已经开始构建JavaScript基础!循环后的javascript回调

我遇到的问题是我有一个函数可以循环几个变量并包含所需的JS库,我需要做的是在循环结束时执行回调!

这是我的代码!

var Utilities = { 
    Log : function(item) 
    { 
     if(console && typeof console.log == 'function') 
     { 
      //Chrome 
      console.log(item); 
     } 
    }, 
    LoadLibraries : function(callback) 
    { 
     $.each(Wordpress.required,function(i,val){ 
      //Load the JS 
      $.getScript(Wordpress.theme_root + '/js/plugins/' + val + '/' + val + '.js',function(){ // %/js/plugins/%/%.js 
       Utilities.Log('library Loaded: ' + val); 
      }); 
     }); 
     callback(); 
    } 
} 

而且用法就是这样!

Utilities.LoadLibraries(function(){ 
    Utilities.Log('All loaded'); 
}); 

上面你看到的文件是在DOM前正在执行callback()女巫的执行力!我需要在每个图书馆收录结束时调用它!

回答

1

$.getScript()是一个异步调用,所以您的JavaScript代码将继续执行,直到该调用完成。如您所知,$.getScript()也接受回调函数作为success参数,该参数将在异步调用完成时执行。你必须围绕这个参数来解决你的解决方案,可能是从数组中删除脚本,然后检查数组是否为空。

$.each(Wordpress.required,function(i,val){ 
     //Load the JS 
     $.getScript(Wordpress.theme_root + '/js/plugins/' + val + '/' + val + '.js',function(){ // %/js/plugins/%/%.js 
      Utilities.Log('library Loaded: ' + val); 

      // Remove the completed item 
      delete WordPress.required[i]; 

      // If array is empty, all scripts loaded - execute callback! 
      if (!Wordpress.required.length) 
       callback();    
     }); 
    }); 
+1

感谢安迪,完美的,我想删除数组项,但我想还跟踪,所以如果一个Ajax电话打进来,如果它已经加载不会加载JS已加载哪些项目,即是我从来没有做过这种方法的原因,但我可以看到我必须做到这一点,我只是将'val'传递给另一个对象,因为Loaded并且一切都很好:)。 '库加载:fancybox所有加载'希望的输出,谢谢 – RobertPitt 2010-06-13 01:16:36