Почему событие load иногда срабатывает перед событием ready в jQuery 3.x?
Я пытался понять это, читая другие темы об этом здесь на SO, но я не мог найти четкого ответа.
Я также проверил https://api.jquery.com/ready/ и https://api.jquery.com/load-event/
Конечно, это не всегда происходит.
Загрузить до готовности (без содержимого)
Загрузка после готовности (с изображением) - но только в первый раз, когда вы посещаете эту ручку, когда вы обновляете ее (или у вас есть отличное подключение к Интернету, и вы загружаете 1 МБ за 1 мс;)) - событие загрузки будет запущено до готовности, потому что у вас уже есть это изображение в кеше браузера.
Я знаю, как частично это исправить, но меня больше интересует, почему это происходит.
var windowLoaded = false;
$(function() {
console.log('Ready'); // Good - it will always fire **before** load event
});
$(window).on('load', function() {
windowLoaded = true;
});
$(function() {
if(windowLoaded) { // (1)
console.log('Loaded');
} else {
$(window).on('load', function() {
console.log('Loaded');
});
}
});
$(function() {
console.log('Ready'); // Bad - it will sometimes fire **after** load event - when `windowLoaded` is true in if statement (1)
});
Но это "исправление" не пуленепробиваемое - см. Комментарии к коду