Heim  >  Artikel  >  Web-Frontend  >  Warum wird mein Skript-Onload-Ereignis nicht ausgelöst, wenn mehrere Skripte nacheinander geladen werden?

Warum wird mein Skript-Onload-Ereignis nicht ausgelöst, wenn mehrere Skripte nacheinander geladen werden?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 01:43:30651Durchsuche

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

Skript-Onload-Ereignis wird nicht ausgelöst

Beim Versuch, eine Reihe von Skripten nacheinander zu laden, wird das Onload-Ereignis nicht ausgelöst. Eine Untersuchung des folgenden Codes offenbart das Problem:

<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>

Das Problem ist auf die falsche Platzierung des Onload-Ereignis-Listeners und die Zuweisung des src-Attributs zurückzuführen. Der korrekte Code lautet:

<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>

Indem sichergestellt wird, dass das Skript an das DOM angehängt wird, bevor das Onload-Ereignis angehängt wird, und indem das src-Attribut nach dem Onload-Ereignis festgelegt wird, wird das erwartete Verhalten erreicht. Darüber hinaus ist es wichtig zu beachten, dass für die IE-Unterstützung der Bereitschaftsstatus überprüft werden sollte. Für jQuery-Benutzer bietet die Methode getScript() eine praktische Alternative zum Laden von Skripten.

Das obige ist der detaillierte Inhalt vonWarum wird mein Skript-Onload-Ereignis nicht ausgelöst, wenn mehrere Skripte nacheinander geladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn