document.ready中window.load事件上的domlistener

时间:2019-03-15 11:19:45

标签: javascript jquery maps

尽管window.load在准备好后仍然可以工作,但是该代码仍然无法工作。

$(document).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 个答案:

答案 0 :(得分:1)

这是与jQuery相关的问题。 jQuery使用其自己的内部延迟对象来表示“就绪”回调函数的列表。在此延迟的对象内,出于各种原因可能会设置超时,也可能不会设置超时,在某些情况下window.onload被取消,甚至更多。 jQuery会做所有这些事情以确保跨浏览器的一致性。从jQuery文档中:

  

请注意,尽管DOM总是在页面出现之前就准备就绪   完全加载后,通常不安全地附加加载事件监听器   在.ready()处理程序期间执行的代码中。例如,脚本可以   在使用方法加载页面后很长时间动态加载   例如$ .getScript()。尽管.ready()添加的处理程序将始终   在动态加载的脚本中执行,窗口的加载事件   已经发生,这些监听器将永远不会运行。

Reference

下面的普通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>