【发布时间】:2011-08-23 12:32:18
【问题描述】:
我想在 DOM 完全加载时触发和事件。我检查了document.readyState,但这不是一个事件。我想在readyState 完成时触发它。我该怎么做?
【问题讨论】:
标签: javascript
我想在 DOM 完全加载时触发和事件。我检查了document.readyState,但这不是一个事件。我想在readyState 完成时触发它。我该怎么做?
【问题讨论】:
标签: javascript
取自另一篇文章,但是,您可以这样做:
var alreadyrunflag = 0; //flag to indicate whether target function has already been run
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", function() {
alreadyrunflag = 1;
// perform what you need to
}, false);
} else if (document.all && !window.opera) {
var contentloadtag = document.getElementById("contentloadtag");
contentloadtag.onreadystatechange = function() {
if (this.readyState == "complete") {
alreadyrunflag = 1;
// perform what you need to
}
}
}
//fallback
window.onload = function() {
setTimeout(function() {
if (!alreadyrunflag) {
// perform what you need to
}
}, 0);
}
这会检查 DOM 是否已完全加载,但是,如果不是,它会回退到 onload。不过,您显然可以操纵它。
另外,如果 JQuery 是一个选项,您只需使用一个简单的函数即可达到相同的效果:
$(document).ready(function() {
// Handler for .ready() called.
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js"></script>
【讨论】:
对于任何已经在使用 jQuery 库的人来说,ready 函数可以用来处理这个问题。
否则@Neal 的解决方案将实现相同的功能,而无需添加额外的依赖项。
【讨论】:
只有在所有外部资源(包括图片)都加载完毕后才会触发。
【讨论】:
一些简单的谷歌搜索将我指向这段代码:
// alternative to DOMContentLoaded
document.onreadystatechange = function () {
if (document.readyState == "complete") {
initApplication();
}
}
【讨论】:
window.onload 会触发。