2010-10-09 2 views
1

Я пытаюсь загрузить некоторый контент на страницу с помощью Ajax. Загруженный html содержит код javascript. Несмотря на то, что код обернут в пределах $(document).ready, он запускается до того, как содержимое будет вставлено в документ, потому что родительский документ Dom готов к моменту загрузки содержимого.Отложить выполнение javascript до добавления содержимого в Документ

Как отложить выполнение кода до тех пор, пока содержимое не будет вставлено в документ. Вот HTML, который я пытаюсь загрузить (это код openid-selector)

<script type="text/javascript" src="/js/openid-jquery.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    alert('ajax-html'); 
    openid.init('openid_identifier'); 
}); 
</script> 
<!-- Simple OpenID Selector --> 
<form action="try_auth.php" method="get" id="openid_form"> 
    <input type="hidden" name="action" value="verify" /> 

    <fieldset> 
      <legend>Sign-in or Create New Account</legend> 

      <div id="openid_choice"> 
       <p>Please click your account provider:</p> 
       <div id="openid_btns"></div> 
      </div> 

      <div id="openid_input_area"> 
       <input id="openid_identifier" name="openid_identifier" type="text" value="http://www.joycebabu.com" /> 
       <input id="openid_submit" type="submit" value="Sign-In"/> 
      </div> 
    </fieldset> 
</form> 

Update: Удалены NoScript тег

ответ

1

кажется, что проблема заключается в том, что openid.init() является загружая собственные данные, и вы хотите манипулировать этими данными после того, как они были загружены синхронно. Существует несколько решений:

Связать функцию обратного вызова, которая выполняется, когда асинхронная загрузка завершена. Открывает ли openid lib эту функцию?

Если вы знаете действительные селекторы элементов данных, которые хотите манипулировать, прежде чем они будут добавлены в DOM, вы можете использовать .live().

Я заметил, что вы используете тег noscript. Я категорически против этого. Выполняйте все свои манипуляции с DOM через JS.

+0

'

+0

openid.init относится к элементам типа '# openid_choice' и' # openid_input_area', которые являются частью загруженного содержимого. Я могу изменить только загруженный контент, а не скрипт, загружающий контент. Можно ли установить обратный вызов из загруженного содержимого? (Тег noscript был частью плагина openid-selector, я его удаляю) –

+0

noscript использовал его, но его можно было бы считать устаревшим в этот момент, и все должно быть обработано JS самостоятельно. noscript имеет свою долю проблем: только обнаруживает отключение браузера JS, а не отключение брандмауэра или любую другую меру, noscript - это элемент уровня блока, а noscript добавляет существенно поведенческую силу в html, который является злом! –

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