2012-02-29 2 views
1

Я хотел бы загрузить внешний HTML. Кроме того, внешний HTML содержит код JavaScript. Так как функция нагрузки не загружает этот сценарий, я должен использовать getScript:

<div id="external-content"></div> 

<script type="text/javascript"> 
    $("#external-content").load("external.html #myid", function() { 
    // do something 
    }); 
    $.getScript("external.js"); 
</script> 

Это работает как шарм, если в external.js не имеет $ (документ) .ready команда, которая пытается получить доступ к элементам из внешнего .html. Мне кажется, что мероприятие уволено слишком рано. Я также попытался поместить команду $ .getScript ("external.js"); в обратный вызов .load, но не удалось. Обратите внимание, что sing external.html отдельно и в том числе external.js работает так же, как и ожидалось.

+0

Почему бы вам не включить ваш внешний.js в сайт, загрузив файл external.html? И запустите собственное событие, на которое реагирует external.js? –

ответ

0

К сожалению, время это имеет смысл (то есть это правильное поведение). Скрипт внутри тега запускает извлечение внешнего.html и не ждет его возврата, он продолжает переходить к извлечению external.js. Тем временем, базовый документ по-прежнему загружается и может (на самом деле, вероятно) завершиться до того, как externa.html будет восстановлен.

Таким образом, вы можете столкнуться с ситуацией синхронизации посредством:

Документ действительно готов (external.html загружаемого не является условием DOM является скриптами), external.js загружен и доступен, но внешний .html еще не загружен. Функция готовности документа будет срабатывать (поскольку документ готов!) Перед присутствием элементов external.html.

Если вы хотите продолжить этот подход, возможно, существуют способы его rejig, так что вы используете on() внутри external.js для делегирования слушателю базового документа (#myid) для событий на элементах внутри external.html ,