为什么没有为 document.readyState==="complete" 加载 javascript

新手上路,请多包涵

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

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

原文由 Ashish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 713
2 个回答

在您测试 document.readyState === "complete" 时,文档的 readyState _不是_“完成”,而是“正在加载”,因此什么也没有发生,而且 loaded 永远不会被调用。

您可以监听 readyState 的变化, 然后 检查它是否“完成”(或者监听 window.onload 哪个更容易):

 document.addEventListener('readystatechange', e => {
  if(document.readyState === "complete"){
    loaded();
  }
});

原文由 user229044 发布,翻译遵循 CC BY-SA 4.0 许可协议

因为该机制是基于事件的。您应该只在实际加载 DOM 后才使用它,所以它毫无意义。

评估已就地完成,但在评估时 document.readyState == "complete"false ,所以没有任何反应。

做事的简单方法:

 window.onload = function() {
    loaded();
};

原文由 flavian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏