Почему событие 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)
});

Но это "исправление" не пуленепробиваемое - см. Комментарии к коду

0 ответов

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