我刚开始从w3school学习javascript,我发现“你只能在HTML输出中使用document.write。如果在文档加载后使用它,整个文档将被覆盖“。所以我试着写下面的代码来检查有效性:
<html>
<head>
<title>ashish javascript learning</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p> sample html with javascript </p>
<script>
document.write("<h1>this is heading</h1>");
document.write("<p>this is sample para</p>");
</script>
<script>
if(document.readyState === "complete"){
loaded();
}
function loaded(){
document.write("<p>loading content after the document has been loaded");
}
</script>
</body>
</html>
代码仍然显示旧值,并且不会覆盖网页的内容。你能告诉我我做错了什么吗?
答案 0 :(得分:15)
在您测试document.readyState === "complete"
时,文档的readyState 不是“完成”,它是“正在加载”,所以没有任何反应,loaded
永远不会调用。
您可以侦听readyState进行更改,然后然后检查它是否“完整”(或者更容易听取window.onload
):
document.onreadystatechange = function () {
if(document.readyState === "complete"){
loaded();
}
}
答案 1 :(得分:4)
因为该机制是基于事件的。你应该只在DOM实际加载后使用它,所以它毫无意义。
评估已经完成,但在评估时document.readyState == "complete"
为false
,所以没有任何反应。
简单的做事方式:
window.onload = function() {
loaded();
};
答案 2 :(得分:3)
您需要做的是将函数挂钩到readystatechange事件然后检查readystate
值。
document.onreadystatechange = function () {
if (document.readyState === 'complete') {
initApplication();
}
}
答案 3 :(得分:0)
这样写,你会得到你想要的结果
document.onreadystatechange = function(){
if(document.readyState == 'complete'){
document.write('document is overwrite')
}
}
答案 4 :(得分:0)
答案 5 :(得分:0)
一个包含多个示例和解释的优秀资源是: https://developer.mozilla.org/en/docs/Web/API/Document/readyState
所以在你的情况下这适用:
document.onreadystatechange = function () {
if (document.readyState === "complete") {
initApplication();
}
}