JQuery: Как выполнить скрипт в загруженной странице с помощью .load()?

$(document).ready(function(){
    $(document).on('click','.opys',function(e){
         e.preventDefault();
         var link = $(this).attr("href");
         $('#target').load(link);
      });
});


С помощью данного кода загружается html страница в div-блок:
<div id="target">
</div>
Как реализовать код, чтобы можно было выполнять скрипты в загруженном блоке, например, слайдшоу? Все скрипты содержатся в main.js, также еще подключена сама библиотека jquery в основном документе.
  • Вопрос задан
  • 5070 просмотров
Решения вопроса 1
Satanpit
@Satanpit
Front-end developer
$(document).ready(function(){
    $(document).on('click','.opys',function(e){
         e.preventDefault();
         var link = $(this).attr("href");
         $('#target').load(link, function() {
               //Здесь выполняете нужные операции над загруженным DOM
         });
      });
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
demimurych
@demimurych
Вообще в самом вопросе есть ответ.
Любой javascript содержащийся в подгруженном и вставленном контенте должен быть выполнен.
Если у вас иначе значит проблема в другом.
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Цитирую John Resig(lead jquery developer):

We have to strip the scripts out otherwise they may be executed many times. The case where a user inserts a list item (for example) with a script inside of it that pertains to that particular item. The user then, later, clones that list item (or moves the list item to a different part of the tree) results in the scirpt being re-executed if we haven't removed it ahead of time.

In short: No browser does "run scripts on injection" so we're kind of defining our own semantics here - one aspect of that being that in order to avoid having scripts run way too many times we strip them out of the source.


В общем, load() не будет выполнять код из загруженного файла. И не должен - неправильно это и небезопасно - иньекция в чистом виде. По логике, вам надо либо весь код в родителе держать, либо после успешной загрузки явно "пепрезапускать" загруженный скрипт. Посмотрите решение здесь:
stackoverflow.com/questions/9794762/jquery-load-is...

И еще в jQuery есть такая "слушающая" штука как live(), обязательно почитайте. В вашем случае должна решить проблему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы