I'm trying to load a set of scripts in order, but the onload event isn't firing for me.

    var scripts = [
        '//cdnjs.cloudflare.com/ajax/libs/less.js/1.3.3/less.min.js',
        '//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0-rc.3/handlebars.min.js',
        MK.host+'/templates/templates.js'
    ];

    function loadScripts(scripts){
        var script = scripts.shift();
        var el = document.createElement('script');
        el.src = script;
        el.onload = function(script){
            console.log(script + ' loaded!');
            if (scripts.length) {
                loadScripts(scripts);
            }
            else {
                console.log('run app');
                MK.init();
            }
        };

        $body.append(el);
    }

    loadScripts(scripts);

I guess native events like el.onload don't fire when jQuery is used to append the element to the DOM. If I use native document.body.appendChild(el) then it fires as expected.

推荐答案

You should set the src attribute after the onload event, f.ex:

el.onload = function() { //...
el.src = script;

您还应该将脚本附加到DOM before,以附加onload事件:

$body.append(el);
el.onload = function() { //...
el.src = script;

Remember that you need to check readystate for IE support. If you are using jQuery, you can also try the getScript() method: http://api.jquery.com/jQuery.getScript/

Jquery相关问答推荐

在shiny 的datatable列中启用智能搜索

Sheets从多张sheet中导入range匹配数据

jQuery 1.4.1 中缺少 JSON 字符串化?

如何使用jquery取消绑定所有事件

如何使用 jQuery 将分钟转换为小时/分钟并添加各种时间值?

jQuery ajax() 使用成功、错误和完成与 .done()、.fail() 和 always()

一次替换多个字符串

为特定请求禁用 ajaxStart() 和 ajaxStop()

如何使用 jquery 正确格式化货币?

如何使用 jQuery Select 的插件重置表单?

如何在 Jquery 中将 delay() 与 show() 和 hide() 一起使用

jQuery - 使用发布数据重定向

复选框值始终为打开

将图像 url 转换为 Base64

捕获在页面任意位置按下的 Enter 键

Bootstrap 4 文件输入

jQuery ajax 成功回调函数定义

如何使用 jQuery 格式化电话号码

jQuery位置href

如何在文件 Select 上触发事件