window.onload
听起来似乎可以与document.onload
松散地互换,但我的经验表明这是不正确的。我继承了一个JS脚本,我不知道如何纠正它。我想要在DOM加载后执行JS,而不是在加载所有资源之后执行。我怎么能这样做?
目前我有:
window.onload = initDropMenu;
我试过了:
document.onload = initDropMenu;
只会导致菜单无法加载。我也尝试从JS中完全删除该行,并让DOM通过以下方式执行:
<body onload="initDropMenu()">
这也导致没有菜单,并且在控制台中没有错误。我的JS知识有限,我在这里缺少什么?
答案 0 :(得分:6)
在窗口加载事件:
加载事件在文档加载过程结束时触发。在 此时,文档中的所有对象都在DOM中,而全部 图像,脚本,链接和子框架已完成加载 [来源:developer.mozilla.org]
<script>
window.onload = function(){ init(); };
</script>
在HTML元素上加载事件:
当资源和依赖于资源时会触发
load
事件 资源已完成加载 [来源:developer.mozilla.org]
<!-- When the image is loaded completely -->
<img onload="image_loaded()" src="w3javascript.gif">
<!-- When the frame is loaded completely (including all resources) -->
<iframe onload="frame_loaded()" src="about.html">
<!-- When body loaded completely (including all resources, images and iframes) -->
<body onload="init()">
许多论坛甚至本网站的一些答案都可能误导你,但是body元素上的load
事件不仅仅等同于 load
事件在窗口上,它是完全相同的事件。以下引用说明了这一点。
由于历史原因,
<body>
和<frameset>
上的某些属性/属性DOMContentLoaded
个元素实际上在其父窗口上设置了事件处理程序 宾语。 (HTML规范将这些命名为:onblur,onerror,onfocus, onload,onscroll。)
[来源:developer.mozilla.org]
DOMContentLoaded事件:
开发人员应该使用的是文档上的 document.addEventListener("DOMContentLoaded", function(event) {
alert("Document is ready");
});
事件。它在html加载并完全解析时触发。
insert Table_3 (id, itemcode, value, date, gain, loss)
values (1, 1, 1000.00000, '2018-02-28', NULL, NULL)
insert Table_3 (id, itemcode, value, date, gain, loss)
values (1, 1, 1000000000.00000, '2018-02-28', NULL, NULL)
select datalength(id),
datalength(itemcode),
datalength(value),
datalength(date)
from dbo.Table_3
初始HTML文档具有时触发DOMContentLoaded事件 已完全加载和解析,无需等待样式表, 图像和子帧完成加载。一个非常不同的事件负载 应该仅用于检测完全加载的页面。这是一个令人难以置信的 使用负载的流行错误DOMContentLoaded会更多 适当的,所以要小心 [来源:developer.mozilla.org]
也许这是关于这个主题的唯一答案,它有适当的参考资料