Komut dosyası etiketinde onload olayını tetiklemeye çalışıyor


105

Sırayla bir dizi komut dosyası yüklemeye çalışıyorum, ancak onload olayı benim için tetiklenmiyor.

    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;
        el.onload = function(script){
            console.log(script + ' loaded!');
            if (scripts.length) {
                loadScripts(scripts);
            }
            else {
                console.log('run app');
                MK.init();
            }
        };

        $body.append(el);
    }

    loadScripts(scripts);

El.onload gibi yerel olayların, öğeyi DOM'a eklemek için jQuery kullanıldığında tetiklenmediğini tahmin ediyorum. Yerel kullanırsam document.body.appendChild(el), beklendiği gibi ateşleniyor.


ziyaret edin: Thi linki: stackoverflow.com/questions/4845762/... Bu kullanım fuull olduğunu
Jitesh

Yanıtlar:


149

Sen belirlesin srcniteliğini sonraonload olay f.ex:

el.onload = function() { //...
el.src = script;

Ayrıca , etkinliği eklemeden önce komut dosyasını DOM'a eklemelisiniz onload:

$body.append(el);
el.onload = function() { //...
el.src = script;

readystateIE desteğini kontrol etmeniz gerektiğini unutmayın . JQuery kullanıyorsanız, şu getScript()yöntemi de deneyebilirsiniz : http://api.jquery.com/jQuery.getScript/


11
bu aslında onu düzeltmez. Ancak document.body.appendChild(el)$ ['body'] yerine kullanırsam, append (el); daha sonra onload olayı beklendiği gibi tetiklenir.
chovy

34
Siparişin neden önemli olduğunu anlamama yardım eder misin?
chovy

12
@David Neden html5rocks.com/en/tutorials/speed/script-loading gibi yerlerde önerildiği gibi öğeyi en son eklemiyorsunuz ? Bu, olay dinleyicisini eklediğiniz ve srcalakasız olarak ayarladığınız sırayı yapmalıdır .
Stuart P. Bentley

3
Merak ediyorum: onloadve srcözniteliklerini ayarlamadan önce DOM'a bir öğe eklemek neden önemlidir ?
Jake Wilson

1
Komut dosyası önbelleğe alınmışsa, src'yi ekler eklemeniz hemen öğe yüklenir ve onload çalışmaz. Onload'u src'den önce eklemek, önbelleğe alınmış komut dosyaları için onload'un tetiklenmesini sağlayacaktır.
JonShipman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.