domlistener на событие window.load внутри document.ready - PullRequest
0 голосов
/ 15 марта 2019

Этот код перестал работать, несмотря на то, что window.load работает после готовности.

$ (документ) .ready (function () {google.maps.event.addDomListener (window, 'load', function () {InitializeMap ();});

But If I write the code outside the ready function, it works fine.

$(document).ready(function () {
    InitializeMap(); });

This code also works nice.

1 Ответ

1 голос
/ 15 марта 2019

Это проблема, связанная с jQuery.jQuery использует собственный внутренний отложенный объект для представления списка «готовых» функций обратного вызова.Внутри этого отложенного объекта могут быть или не быть установлены таймауты по разным причинам, window.onload отменяется при некоторых условиях и многое другое.jQuery делает все это для обеспечения согласованности между браузерами.Из документации jQuery:

Обратите внимание, что хотя DOM всегда становится готовым до полной загрузки страницы, обычно небезопасно прикреплять прослушиватель события загрузки в коде, выполняемом во время обработчика .ready ().,Например, сценарии могут быть загружены динамически после загрузки страницы с помощью таких методов, как $ .getScript ().Хотя обработчики, добавленные с помощью .ready (), всегда будут выполняться в динамически загружаемом скрипте, событие загрузки окна уже произошло, и эти слушатели никогда не запустятся.

Ссылка

Простое решение JavaScript ниже работает, как и следовало ожидать, так как не все, что входит в реализацию jQuery того же кода:

document.addEventListener('DOMContentLoaded', () => {
  google.maps.event.addDomListener(window, 'load', function() {
    alert('custom event');
  });
});
<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...