首页  >  文章  >  web前端  >  为什么按顺序加载多个脚本时我的脚本 Onload 事件没有触发?

为什么按顺序加载多个脚本时我的脚本 Onload 事件没有触发?

Susan Sarandon
Susan Sarandon原创
2024-11-04 01:43:30656浏览

Why Doesn't My Script Onload Event Trigger When Loading Multiple Scripts Sequentially?

脚本 Onload 事件未触发

尝试顺序加载一系列脚本时,onload 事件无法触发。检查下面的代码可以发现问题:

<code class="javascript">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;  // Removed: el.src assignment here
        el.onload = function(script){
            console.log(script + ' loaded!');
            if (scripts.length) {
                loadScripts(scripts);
            }
            else {
                console.log('run app');
                MK.init();
            }
        };

        $body.append(el);  // Added: el appended before onload
        el.src = script;   // Moved: el.src assignment here
    }

    loadScripts(scripts);</code>

该问题源于 onload 事件监听器的错误放置和 src 属性的分配。正确的代码是:

<code class="javascript">        el.onload = function(script){
            console.log(script + ' loaded!');
            if (scripts.length) {
                loadScripts(scripts);
            }
            else {
                console.log('run app');
                MK.init();
            }
        };

        $body.append(el);
        el.src = script;</code>

通过确保在附加 onload 事件之前将脚本附加到 DOM,并在 onload 事件之后设置 src 属性,可以实现预期的行为。此外,需要注意的是,对于 IE 支持,应检查就绪状态。对于 jQuery 用户, getScript() 方法为脚本加载提供了一种方便的替代方法。

以上是为什么按顺序加载多个脚本时我的脚本 Onload 事件没有触发?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn