window.onload()和document.addEventListener('load', ..)之间有什么区别?

9

在我看来,当每个资源及其依赖资源都加载完成时,两个事件都会被触发。这引发了一些问题:

  1. 这两个事件之间有什么区别吗?
  2. 哪个事件会首先被触发?
  3. 在所有内容都加载完成后,应该使用哪个事件来将其他HTML元素添加到页面中?
3个回答

15
  1. 正如你所说,它们都可以做同样的事情。 addEventListener 的优点是您可以将多个事件侦听器添加到加载事件中。

  2. 经过一些基本测试,似乎监听器的调用顺序与它们的设置顺序相同,但我不知道这有多可靠。

  3. 您可以使用任一方法来完成您需要做的任何事情。


不,它们是不同处理的。简单的onload函数可以被覆盖,并且似乎它首先被执行。事件侦听器会被堆叠,然后所有侦听器都会被执行。我曾花费3个小时来调试一个脚本。它使用了一个简单的window.onload,后来被另一个脚本覆盖,所以第一个脚本的onload从未被执行。请查看此示例:https://jsfiddle.net/ag4snbpz/ - 因此,请避免使用纯onload、onclick等方法! - David58

5

它们并不完全相同,在Firefox中至少如此。

原因是window.onload等同于window.addEventListener("load"),而不是document.addEventListener("load")

尽管所有我看到的文档都说它们是等效的。


1
你所指出的是有效的,尽管这是常识。在99.9%的情况下,文档和窗口的完全加载几乎同时发生。 - Abandoned Cart

0

1- 据我所知,添加事件监听器可以让您更自由地删除您添加的控件。

2- 我对此一无所知。但我认为这不应该有太大的区别。

3- 事件监听器允许您控制元素并随意删除控件,因此应该更有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接