Хотя я думаю @ jAndy's ответ прав, вы можете себе позволить дополнительную уверенность, также поместив код в onload
в ready()
вызове.
Просто сделайтеубедитесь, что ваш основной ready()
вызов идет первым.
$(document).ready(function() {
// Your normal ready handler
});
$(window).load(function() {
// Placing code in another .ready() call in here will add it to the
// end of internal Array of ready handlers if any are pending
$(document).ready(function() {
// my onload code
});
});
Так что, если ready()
уже сработал к моменту запуска onload
, ваш код onload
все равно будет выполняться. (Внутренний флаг устанавливается, когда DOM готов, поэтому будущие вызовы .ready()
будут немедленно вызваны.)
Если .ready()
каким-то образом не сработалкогда произойдет onload
, это будет означать, что ваш исходный код ready()
будет первым во внутреннем массиве, а новый код .ready()
будет добавлен в конец массива.
EDIT:
Поиск в источнике для основного обработчика jQuery.ready
, который запускается, когда DOM готов (который, в свою очередь, запускает списокиз .ready()
обработчиков пользователя) , похоже, что есть ошибка IE, когда обработчик запускается немного раньше.
Чтобы исправить эту ошибку, jQuery делает обработчик асинхронно вызывается до тех пор, пока он действительно не увидит document.body
.
ready: function (wait) {
// Either a released hold or an DOMready/load event and not yet ready
if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) {
<b>
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if (!document.body) {
return setTimeout(jQuery.ready, 1);
}
</b>
// Remember that the DOM is ready
jQuery.isReady = true;
// If a normal DOM Ready event fired, decrement, and wait if need be
if (wait !== true && --jQuery.readyWait > 0) {
return;
}
// If there are functions bound, to execute
readyList.fireWith(document, [jQuery]);
// Trigger any bound ready events
if (jQuery.fn.trigger) {
jQuery(document).trigger("ready").off("ready");
}
}
},
Казалось бы, из-за этого асинхронного зацикливания обработчика IE, по крайней мере, будет склонен вызывать обработчик window.onload
до.ready()
обработчики.
Добавление к обработчику .ready()
Список в onload
, как я описал выше, должен исправить это.