2010-06-11 4 views
0

Я использую jQuery .load() для загрузки содержимого в div. Иногда у загружаемого содержимого есть функция document.ready(), которая вызывается и работает правильно (т. Е. Вызывается функция ready()). Однако, когда я использую идентификатор элемента в .load(), например: .load ("test.php #content"), Javascript больше не выполняется, даже если я помещаю тег скрипта внутри элемента, который находится загружен. У кого-нибудь есть решение для этого, кроме как не использовать идентификатор элемента в .load()? Заранее спасибо.jQuery .load с другой страницы, содержащей Javascript

Вот динамическое содержимое (loadDialogTest.php):

<div id="test"> 
     <div> 
     Hello, World! 
     </div> 


     <script type="text/javascript"> 
      $(document).ready (function() { 
       alert ("ready"); 
      }); 
     </script> 
    </div> 

и здесь страница (где элемент ID не указан), который загружает его (укорачивается настолько, насколько это возможно, сохраняя при этом форму:

<head> 
     <script type="text/javascript"> 
      $(document).ready (function() { 
       $("#openDialog").click (function() { 
        $("<div></div>") 
         .load ("loadDialogTest.php") 
         .appendTo ($("#containingDiv")) 
         .dialog ({ 
         autoOpen: 'false', 
         title: 'Test This!', 
         close: function() { 
          $(this).dialog ('destroy').remove(); 
         } 
        }); 
       }); 
      }); 
     </script> 
    </head> 

    <body> 
     <a href="#" id="openDialog">Open it</a> 

     <div id="containingDiv"> 
     </div> 
    </body> 

Если я ставлю #test после файла .php в качестве дел до загрузки, тем JQuery готов() функция больше не вызывается.

+0

Если функция ready() не вызывается, можете ли вы просто поместить свой javascript в блок сценария без функции ready()? Таким образом, он будет выполняться без ожидания события ready(). – shanabus

+0

Собственно, при указании #test после PHP-файла вызывается блок Javascript «никогда». Я тоже пробовал это :( – Dave

+0

Это, похоже, известная проблема с .load, когда я столкнулся с той же проблемой. Если вы посмотрите комментарии на странице jQuery .load, вы найдете много других в одной лодке, включая меня. На самом деле мне еще нужно найти решение, которое мне нравится, потому что мне очень нравится вытаскивать только элемент страницы и, как хранить файлы, как вы. Учитывая, что прошло несколько месяцев, вы что-нибудь придумали? – bladmiral

ответ

0

Я где-то читал, что вы должны .remove() для сначала создайте теги сценария, добавьте загруженный HTML в свой DOM, а затем добавьте удаленные сценарии. Я обновлю, как только найду ссылку.

UPDATE

Не удалось найти ссылку, но код при условии, отлично работает для меня. Я использую JQuery 1.4.2 и JQuery UI 1.8.1. Я вставил ваш код на свой сайт, и он работает, предупреждает «готов».

UPDATE 2

Хорошо, я создал тестовую страницу, используя код, кажется, работает нормально - Load test page. Единственное, что вы заметите, это то, что благодаря CMS он перенаправляет вас вскоре после загрузки внешнего контента. Но поле «Предупреждение» срабатывает.

UPDATE 3

Дэйв, проверить мою тестовую страницу в настоящее время. Я добавил функцию в конец load(), которая вытаскивает скрипты из загруженного html и добавляет их в тело страницы. Кажется, это работает, но мне пришлось вытащить Alert из функции ready() документа.

+0

Да, это действительно работает, но вы не изменили открытую страницу, чтобы включить идентификатор элемента. В моем примере новый .load будет: .load ("loadDialogTest.php #test"). Я понимаю, что неэлементная указанная версия работает, только когда идентификатор элемента, содержащий контент для фактической загрузки, указан, что он терпит неудачу. – Dave

+0

О, я вижу, я добавил .find («div # test»), и, похоже, он загружает только этот div сейчас. – shanabus

+0

Я заметил, что ваша страница отображает «готовое» предупреждение, хотя вы сказали, что удалили его с загруженной страницы. Я попробовал код, но по какой-то причине сценарии никогда не присоединяются к телу. Я также использовал инспектор DOM от Chrome, чтобы искать динамически загруженный сценарий безрезультатно. Тем не менее, я собираюсь поработать с тем, что вы отправили, чтобы посмотреть, смогу ли я заставить его работать. Где вы положили .find («div # test»), я этого не видел. – Dave

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