2013-02-12 1 views
1

Я импортирую необходимые файлы через jQuery, и я хочу обновить текст, чтобы показать, какой файл загружается, но кажется, что импорт выполняется до того, как текст когда-либо обновляется, независимо от указанного порядка. Тем не менее, ведение журналов консоли по расписанию, хотя оно и называется после в заявлении на импорт. Я также пробовал вызов текстового обновления, но он тоже не работал.Обновить объект HTML при загрузке исходных файлов с помощью jQuery

Вот фрагмент кода:

var jsFiles = new Array('some js files'); 
var cssFiles = new Array('some css files'); 

for(var i = 0; i < jsFiles.length; i++) { 
    $('#loadfile').text('imported js library `' + jsFiles[i]+'`'); 
    $('head').append('<script type="text/javascript" src="'+jsFiles[i]+'"></script>'); 
    console.log('imported js library `' + jsFiles[i]+'`'); 
} 

for(var i = 0; i < cssFiles.length; i++) { 
    $('#loadfile').text('imported css library `' + cssFiles[i]+'`'); 
    $('head').append('<link rel="stylesheet" media="screen" type="text/css" href="'+cssFiles[i]+'" />'); 
    console.log('imported css library `' + cssFiles[i]+'`'); 
} 

Я попытался установить тайм-аут, и я также попытался установить переменную верно, если текст был обновлен и проверки, чтобы убедиться, что переменная была правда до импорта файлов , но это просто заставило файлы не импортировать.

Я также пробовал использовать вызов document.getElementById, чтобы обновить текст, но там тоже нет. Есть ли что-то, что присуще javascript, которое задает приоритет операторов или я просто что-то пропускаю?

+0

Цикл будет выполняться в течение миллисекунд, сопоставьте быстрее загружаются все сценарии. Вы не увидите заметных изменений элемента. Сценарии загружаются асинхронно, код не ждет загрузки скрипта. Кроме того, я не понимаю, в чем ваша проблема (если есть что-то еще). –

ответ

0

В большинстве браузеров Javascript запускается в потоке графического интерфейса пользователя. Пока ваш скрипт загружается и читается, графический интерфейс не будет обновляться до завершения ввода скрипта. Window.setTimeout позволит gui обновить перед загрузкой/вставкой скрипта.

for(var i = 0; i < jsFiles.length; i++) { 
    $('#loadfile').text('imported js library `' + jsFiles[i]+'`'); 
    window.setTimeout(function() { 
     $('head').append('<script type="text/javascript" src="'+jsFiles[i]+'"></script>'); 
    }, 10); 
    console.log('imported js library `' + jsFiles[i]+'`'); 
} 

Источник: JavaScript seems to be executing code in wrong order

+0

Как я уже сказал, я пытался использовать таймауты, но они только сломали мой код дальше. Когда я попробовал ваш пример, он говорит, что одна из моих функций не определена, потому что она никогда не импортировала родительский файл. – SISYN

+0

Файлы javascript по-прежнему будут загружаться асинхронно. Поэтому, если дочерний javascript загружается перед родителем, эта ошибка возникнет. Возможно, посмотрите на функцию .getScript jQuery, чтобы получить скрипты. Затем установите переменную в возвращаемой функции. не продолжайте цикл до тех пор, пока эта переменная не будет истинна. Пример: $ .getScript (jsFiles [i], function() { finished = true }); –

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