2013-04-26 3 views
68

Я пытаюсь загрузить набор сценариев по порядку, но событие onload не стреляет для меня.Попытка запустить событие onload на скрипт-тег

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 не срабатывают, когда JQuery используется для добавления элемента в DOM. Если я использую native document.body.appendChild(el), тогда он срабатывает, как ожидалось.

+0

визит: Тхи ссылка: //stackoverflow.com/questions/4845762/onload-handler-for-script-tag-in-internet-explorer Это использование fuull – Jitesh

ответ

91

Вы должны установить атрибут srcпосле на onload событие, f.ex:

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

Вы должны также добавляемый сценарий к DOM перед тем креплением onload события:

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

Помните, что вам необходимо установить readystate для поддержки IE. Если вы используете JQuery, вы можете также попробовать getScript() метод: http://api.jquery.com/jQuery.getScript/

+0

@chovy typo, отредактированный ... – David

+7

, который на самом деле его не исправляет. Но если я просто использую 'document.body.appendChild (el)' вместо $ ('body'). Append (el); то событие onload срабатывает, как ожидалось. – chovy

+0

Я не уверен, как «исправить» ваш код, но лучше всего добавить сценарий в '', прикрепить обработчик 'onload' и атрибут' src'. В этой последовательности. – David

Смежные вопросы