Одна странная проблема с $ .load () - PullRequest
4 голосов
/ 10 сентября 2009

Это файл, который я использую $ .load () для загрузки в DOM:

<script type="text/javascript">
    $('.close').click(function() { alert(1) });
</script>
<div class="close">
    click me
</div>

Скажите, мне кажется, что часть <script> будет автоматически задерживаться, когда она загружена , это функция $ .load ()?

Если да, то как это реализовано?

Чувствуется потрясающе!

Ответы [ 2 ]

9 голосов
/ 10 сентября 2009

Я прочитал источник jQuery, и вот что я нашел:

(номера строк ссылаются на несжатый jQuery 1.3.2)

  1. jQuery.load в конечном итоге получает ответ и вызывает метод jQuery html с результатом для его вставки. (вокруг строки 3267)
  2. jQuery.html затем вызывает метод jQuery append. (строка 488)
  3. jQuery.append затем вызывает метод domManip с функцией обратного вызова, которая вставляет узлы DOM. (строка 253)
  4. domManip (в строке 514) немного сложнее, но в конечном итоге он фактически передает узлы DOM в обратный вызов для вставки, а затем вызывает evalScript для каждого сценария после вставки DOM-узлов, независимо от их порядка в загруженном html. (строка 526) .

Следовательно, jQuery фактически выполняет сценарии с задержкой!

используйте источник, Люк.

0 голосов
/ 10 сентября 2009

"Сценарий не будет работать должным образом, если вы обращаетесь к файлу напрямую из браузера (при щелчке по нему нет оповещений). Но если вы загрузили его на другую страницу с помощью $ .load (), он будет работать ( оповещение при нажатии). - Берег "

Когда вы загружаете файл в браузер как таковой, причина, по которой при его нажатии не появляется предупреждение, заключается в том, что когда браузер читает строку "$('.close')...", еще нет объекта DOM класса "close", потому что после тега сценария.

Вы можете решить эту проблему:

$(document).ready(function(){$('.close').click(function() { alert(1) });});

Что касается части задержки, то это потому, что когда вы используете $ .load (), функция сначала загружает файл, а затем помещает источник в объект DOM. После помещения источника в объект DOM он будет анализировать теги <script> в вашем файле. Вот почему ваше событие click успешно связано с вашими объектами DOM с классом close

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...