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.