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