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

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

Update2. Благодаря Tom (идентификатор пользователя 20!) для публикации ссылка на билет на трекер ошибок jQuery.

Update3 - 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, и очистить кеш.

Ответ 1

Это связано с ошибками 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:
<а7 >

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

Ответ 2

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

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

Ответ 4

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

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