JQuery ожидает загрузки изображений перед выполнением document.ready

Обновление: эта ошибка была подтверждена как минимум двумя другими. Даже если вы не читаете мой полный пост - если вы читаете это и используете JQuery 1.3.1, тогда прекратите его использовать, если вы полагаетесь на какие-либо обработчики, которые вы хотите выполнить, когда DOM завершен, но до загрузки изображений страницы,

Обновление 2: Спасибо Tom (идентификатор пользователя 20!) За размещение ссылки на тикет на трекере ошибок jQuery.

Обновление 3 - 2009/01/28: проблема была решена надлежащим образом (для тех, для кого возврат к 1.2.6 невозможен). Для тех, кто в настоящее время использует 1.3.1 и нуждается в немедленном исправлении, вы можете прочитать принятый ответ ниже для направления. Спасибо Джон.


Я только что обновился до JQuery 1.3.1, и мне потребовалось несколько часов, чтобы понять, что моя любимая

$(function( ) {  ... }

Синтаксис теперь ждал загрузки всей страницы (включая изображения) перед выполнением тела функции. Я видел странное поведение при попытке интегрировать меню Yahoo. (К счастью, у меня были медленные загрузки изображений на моей странице, что заставило меня осознать проблему)!

Я сделал тестовый файл, потому что подумал, что происходит что-то более сложное, но у меня все еще были те же симптомы даже с этим простым файлом.

<head>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>   
   <script>
    $(function() {    
      alert("Ready"); 
    });
  </script>
</head>

<body>      
  <img src="<PATH_TO_DYNAMIC_IMAGE>_1.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_2.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_3.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_4.jpg" />       
</body>

Разные версии JQuery имели разные результаты:

  • В версии 1.2.6 происходит то, что окно оповещения отображается мгновенно, а затем я вижу загружаемые изображения позади него (ожидаемое и задокументированное поведение).
  • Что происходит в версии 1.3.1, так это то, что все изображения загружаются, и только после этого появится окно с предупреждением.

В чем дело! Это новая функция (не могу представить почему) или ошибка?

Важный: это только кажется, проблема в IE, а не Firefox

Извините, у меня нет файла динамического изображения, который был бы общедоступным, чтобы другим было легче это увидеть. Если вы хотите проверить это, я предлагаю использовать большой файл изображения, выбранный случайным образом из изображений Google, и очистить кэш.

4 ответа

Решение

Это произошло из-за ошибок jQuery # 2614 и # 3880 - были определенные проблемы с готовым кодом в IE в 1.2.6 и в 1.3 - и теперь другой набор проблем в 1.3.1.

Более подробное обсуждение можно найти здесь:
http://groups.google.com/group/jquery-dev/browse_thread/thread/3abf45d3fd4d50fc

И тикет, связанный с этой проблемой, можно найти здесь (если вы обнаружите дополнительные проблемы с исправлением, пожалуйста, заново откройте тикет и отправьте сообщение в вышеупомянутую ветку jquery-dev):
http://dev.jquery.com/ticket/3988

Я только что исправил это в SVN rev 6170.

Я только что выпустил новую ночную версию, которую вы можете использовать, пока не выйдет финальная версия 1.3.2:
http://code.jquery.com/nightlies/jquery-2009-01-28.js

Извините за задержку с получением исправления - путешествовал на этой неделе.

Есть некоторые вещи, которые просто не могут быть проверены модулем. Только что подтверждено в IE6+7 и 1.3.1. Святой ад, какой огромный регресс.

Итак, у вас есть время, чтобы сообщить об этом? Только что проверил, и это не известная ошибка для 1.3.1.

Вот обновление билета, который я отправил. Кажется, что @Webdawson прикрепил образец страницы к заявке.

Да, я добавил пример, это явно ошибка в IE6 & 7 (я не проверял его в других версиях IE). Кажется, что в версии 1.3.1 есть много ошибок.:(

Вот пример ссылки: http://www.kollermedia.at/jquery_bug.html

Другие вопросы по тегам