Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载多个元素时回调_Javascript_Html - Fatal编程技术网

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++不工作。。?