Peristiwa Muatkan Skrip Tidak Mencetuskan
Apabila cuba memuatkan satu siri skrip secara berurutan, acara onload gagal dicetuskan. Pemeriksaan kod di bawah mendedahkan isu:
<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>
Isu ini berpunca daripada peletakan pendengar acara onload yang salah dan penetapan atribut src. Kod yang betul ialah:
<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>
Dengan memastikan skrip dilampirkan pada DOM sebelum melampirkan acara onload dan dengan menetapkan atribut src selepas acara onload, gelagat yang dijangkakan tercapai. Selain itu, adalah penting untuk ambil perhatian bahawa untuk sokongan IE, keadaan sedia perlu diperiksa. Untuk pengguna jQuery, kaedah getScript() menyediakan alternatif yang mudah untuk memuatkan skrip.
Atas ialah kandungan terperinci Mengapa Skrip Saya Tidak Memuatkan Peristiwa Mencetuskan Apabila Memuatkan Berbilang Skrip Secara Berurutan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!