【发布时间】:2021-02-14 19:26:55
【问题描述】:
我正在编写一个程序来查找 document.ready、window.onload、body.onload 的执行顺序,但由于某种原因,我的 body.onload 没有给出 console.log。为什么?
$(document).ready(function(){
console.log('document is ready now ...');
});
window.onload = () => {
console.log('window is loaded...');
}
function bodyOnload() {
console.log('body is loaded...');
}
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body onload="bodyOnload()">
<h1>Hello ...</h1>
</body>
</html>
【问题讨论】:
-
是的,我认为这个链接是正确的答案。
-
正确答案比较复杂。当您在
body中使用addEventListener将负载侦听器附加到body时,它永远不会运行。DOMContentLoaded监听器总是首先被触发,按照附加的顺序,然后在head中设置一个window.load监听器,然后在标签中设置body.onload,最后在body的末尾设置window.load.事件在 Firefox 82 中按此顺序触发,但如果在脚本中添加defer/async属性,则顺序可能会混乱。请注意,这必须在一个简单的页面上进行测试,您不能使用框架或像 JSFiddle 这样的脚本宿主。
标签: javascript html jquery ecmascript-6