ホームページ  >  記事  >  ウェブフロントエンド  >  複数のスクリプトを連続してロードすると、スクリプトのオンロード イベントがトリガーされないのはなぜですか?

複数のスクリプトを連続してロードすると、スクリプトのオンロード イベントがトリガーされないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 01:43:30651ブラウズ

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 サポートの場合、readystate をチェックする必要があることに注意することが重要です。 jQuery ユーザーにとって、getScript() メソッドはスクリプト読み込みの便利な代替手段を提供します。

以上が複数のスクリプトを連続してロードすると、スクリプトのオンロード イベントがトリガーされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。