Javascript 加载多个元素时回调
例如,您可以这样做:Javascript 加载多个元素时回调,javascript,html,Javascript,Html,例如,您可以这样做: <script type="text/javascript"> function load(arr, callback) { for (var i = 0; i < arr.length; i++) { var element = document.createElement("script"); element.setAttribute("type", "text/javascri
<script type="text/javascript">
function load(arr, callback) {
for (var i = 0; i < arr.length; i++) {
var element = document.createElement("script");
element.setAttribute("type", "text/javascript");
element.setAttribute("src", arr[i]);
document.getElementsByTagName("head")[0].appendChild(element)
}
callback() // ??? When all loaded
}
</script>
函数加载(arr、回调){
对于(变量i=0;i
当所有的脚本都加载完毕时,是否还需要执行回调?这是可能的,但您不需要这样做。脚本按顺序执行
多个异步进程之间的同步最好通过承诺来完成 您可以执行以下操作:
var p1 = new Promise();
var p2 = new Promise();
when(p1, p2).done(function () {
// p1 and p2 are complete
});
function load(arr, callback) {
for (var i = 0; i < arr.length; i++) {
var element = document.createElement("script");
element.setAttribute("type", "text/javascript");
element.setAttribute("src", arr[i]);
document.getElementsByTagName("head")[0].appendChild(element)
element.addEventListener("load",onLoad);
}
var loaded = 0;
function onLoad(){
if(++loaded == arr.length){
callback()
}
}
}
确切的代码取决于您选择的库/实现。请尝试以下JavaScript代码片段:
a.addEventListener(“加载”,函数(){
b、 addEventListener(“加载”,callback());
});
这应该能解决你的问题 使用香草JavaScript,您可以执行以下操作:
var p1 = new Promise();
var p2 = new Promise();
when(p1, p2).done(function () {
// p1 and p2 are complete
});
function load(arr, callback) {
for (var i = 0; i < arr.length; i++) {
var element = document.createElement("script");
element.setAttribute("type", "text/javascript");
element.setAttribute("src", arr[i]);
document.getElementsByTagName("head")[0].appendChild(element)
element.addEventListener("load",onLoad);
}
var loaded = 0;
function onLoad(){
if(++loaded == arr.length){
callback()
}
}
}
函数加载(arr,回调){
对于(变量i=0;i
您还可以使用Promissions,如Halcyon已声明的,或其他一些库,如
async
第三个脚本标记中的代码将不会执行,直到前两个脚本按照定义的顺序加载并执行。因此,无需监听“加载”回调。如果这不是您的答案:您可以为两个加载事件指定相同的侦听器,并且只有在第二次调用代码时才执行代码。您可以通过将变量设置为0,然后在每次调用时将其增加1来了解这一点。虽然我建议使用像async
@VanCoding这样的库,但为了更容易理解,这两个脚本都引用了什么?@cuSK应该“全部”修复小心!如果在添加处理程序之前调用了b的load事件呢?很酷,我想如何在我编辑的代码中插入它?嗯,等等,++loaded和loaded++有什么区别,因为loaded++不工作。。?