Rumah >hujung hadapan web >tutorial js >Mengapa Peristiwa `onload` Tidak Menyala Apabila Melampirkan Elemen Skrip Menggunakan jQuery?

Mengapa Peristiwa `onload` Tidak Menyala Apabila Melampirkan Elemen Skrip Menggunakan jQuery?

Barbara Streisand
Barbara Streisandasal
2024-11-04 02:45:02346semak imbas

Why Doesn't the `onload` Event Fire When Appending a Script Element Using jQuery?

Masalah OnLoad Event dengan Tag Skrip

Dalam percubaan untuk memuatkan skrip dalam urutan, isu timbul apabila acara onload gagal dicetuskan . Coretan kod berikut menunjukkan masalah:

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);
}

Acara onload tidak menyala apabila elemen skrip dilampirkan pada DOM menggunakan jQuery ($body.append(el)). Walau bagaimanapun, menggunakan JavaScript asli document.body.appendChild(el) mencetuskan acara seperti yang dimaksudkan.

Penyelesaian:

Untuk menyelesaikan isu ini, ubah suai kod seperti berikut:

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

Dengan melampirkan skrip pada DOM sebelum menetapkan atribut src, acara onload akan menyala sebagai dijangka. Selain itu, pertimbangkan untuk menggunakan kaedah getScript() jQuery untuk keserasian merentas pelayar.

Atas ialah kandungan terperinci Mengapa Peristiwa `onload` Tidak Menyala Apabila Melampirkan Elemen Skrip Menggunakan jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn