javascript - document.ready 内 window.load 事件上的 domlistener
问题描述
尽管 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.
解决方案
这是一个与 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>
推荐阅读
- node.js - mongodb 查询获取所有结果 if filter value === 'All' if not get the specified filter
- javascript - 使用节点获取检索响应查询
- wordpress - 如何制作这样的直接链接 mysite.com/whats-new/page/2
- python - Docker 容器在本地运行 - 没有发送任何数据
- javascript - JavaScript 进度条无限加载的问题
- excel - VBA中复制粘贴数组公式的问题
- c++ - 未定义对 BankDetails::BankDetails() 的引用
- javascript - 我应该能够在事件源连接打开时获取吗?
- javascript - Javascript: Efficiently replace Object in Array that has property with specified value in a stateful manner?
- vue.js - vue props 从父组件传递到子组件