加载多个元素时回调
Callback when multiple elements loaded
例如,您可以这样做:
<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>
当所有脚本都加载完毕时,是否需要进行回调?
使用香草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)
element.addEventListener("load",onLoad);
}
var loaded = 0;
function onLoad(){
if(++loaded == arr.length){
callback()
}
}
}
您也可以使用promise,比如Halcyon已经说过的,或者其他一些库,比如async
。
这是可能的,但你不需要。脚本是按顺序执行的。
多个异步进程之间的同步最好使用Promises来完成。
你可以做一些类似的事情:
var p1 = new Promise();
var p2 = new Promise();
when(p1, p2).done(function () {
// p1 and p2 are complete
});
确切的代码取决于您选择的库/实现。
尝试以下JavaScript片段:
a.addEventListener("load", function() {
b.addEventListener("load", callback());
});
这应该能解决你的问题!
相关文章:
- 如何在没有回调的情况下获取有关元素的信息
- Material Design Lite所有元素加载JS回调
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- zclip:引用afterCopy回调中的sender元素
- 如何在 ajax 请求的回调中设置 ngInclude 元素的 src 属性
- 加载特定元素的 AJAX 内容(将 DOM 元素传递给 AJAX 回调函数)
- 在 JavaScript / jQuery 回调中使用“this”更改单击元素的文本
- 将 Javascript 单击回调分配给 Flash 元素
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 如何使用 javascript 和 Httphandler 为文件上传添加带有表单元素的回调
- Javascript 数组映射“出现”以对缺少的元素执行回调
- 将当前元素作为参数传递给循环中的回调函数
- 对多个元素执行回调函数
- 加载多个元素时回调
- 维护事件回调中元素的顺序
- 将事件监听器(在回调函数中)添加到生成的元素中
- .json回调中的第一个元素.Shift()
- 正在执行元素atrribute中定义的回调