尽管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.
答案 0 :(得分:1)
这是与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>