JS window.onload用法与文档

时间:2018-03-04 06:43:16

标签: javascript dom document-ready

从我的阅读中

window.onload听起来似乎可以与document.onload松散地互换,但我的经验表明这是不正确的。我继承了一个JS脚本,我不知道如何纠正它。我想要在DOM加载后执行JS,而不是在加载所有资源之后执行。我怎么能这样做?

目前我有:

window.onload = initDropMenu;

我试过了:

 document.onload = initDropMenu;

只会导致菜单无法加载。我也尝试从JS中完全删除该行,并让DOM通过以下方式执行:

<body onload="initDropMenu()">

这也导致没有菜单,并且在控制台中没有错误。我的JS知识有限,我在这里缺少什么?

1 个答案:

答案 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]

也许这是关于这个主题的唯一答案,它有适当的参考资料