为什么没有为document.readyState加载javascript ===“完成”

时间:2013-05-08 22:02:36

标签: javascript html5

我刚开始从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>

代码仍然显示旧值,并且不会覆盖网页的内容。你能告诉我我做错了什么吗?

6 个答案:

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

抱歉没有解释; 当代码在javascript上执行时,dom没有完成,因此文件的readyState不是'complete',那么initApplication函数将不会被调用; 如果要调用initApplication函数,则必须向文档添加触发器。我添加一个触发器,如'document.onreadystatechange'。“document.onreadystatechange”将在文档状态发生变化时被调用; 因此,当加载文档时,将调用“document.onreadystatechange”

答案 5 :(得分:0)

一个包含多个示例和解释的优秀资源是: https://developer.mozilla.org/en/docs/Web/API/Document/readyState

所以在你的情况下这适用:

document.onreadystatechange = function () {
  if (document.readyState === "complete") {
    initApplication();
  }
}