Uncaught Typeerror:无法读取null的属性'innerHTML'

Dav*_*nze 7 javascript properties innerhtml typeerror

任何人都可以解释这些错误是什么?

未捕获的TypeError:无法读取null的属性"innerHTML"

在我的网站上查看 这是导致错误的行:

var idPost=document.getElementById("status").innerHTML;
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 22

var idPost=document.getElementById("status").innerHTML;
Run Code Online (Sandbox Code Playgroud)

您的网页中不存在"status"元素.

因此document.getElementById("status")返回null.虽然你不能使用NULL的innerHTML属性.

你应该添加这样的条件:

if(document.getElementById("status") != null){
    var idPost=document.getElementById("status").innerHTML;
}
Run Code Online (Sandbox Code Playgroud)

希望这个答案可以帮到你.:)


egi*_*ray 22

更新:

问题不是要求jquery.所以我们不用jquery就可以了:

document.addEventListener("DOMContentLoaded", function(event) { 
    //Do work
});
Run Code Online (Sandbox Code Playgroud)

请注意,此方法不适用于IE8.

旧答案:

您在DOM准备好之前调用此脚本.如果你把这段代码写入jquery的$(function()方法,它就可以了.

  • 这是我案件中的罪魁祸首.这一点肯定应该包含在最佳答案中. (2认同)

小智 5

在 body 语句中的 html 结构之后运行代码

    <html>
    <body>
    <p>asdasd</p>
    <p>asdasd</p>
    <p>asdasd</p>
    <script src="myfile.js"></script>
    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)


小智 5

如果脚本位于 HTML 文档的头部,则浏览器尚未创建 HTML 文档的正文,无论最终会出现什么(如果脚本位于 HTML 文件中但位于元素)。当您的变量尝试查找 document.getElementById("status") 时,它还不存在,因此它返回 null 值。当您稍后在代码中使用该变量时,将使用初始值 (null) 而不是当前值,因为没有任何内容更新该变量。

我不想将我的脚本链接移出 HTML 头,所以我在我的 JS 文件中这样做了:

var idPost //define a global variable
function updateVariables(){
    idPost = document.getElementById("status").innerHTML; //update the global variable
}
Run Code Online (Sandbox Code Playgroud)

这在 HTML 文件中:

<body onload="updateVariables()">
Run Code Online (Sandbox Code Playgroud)

如果您已经有一个 onload 函数,您可以向其中添加附加行或调用该函数。

如果您不希望该变量成为全局变量,请在您尝试运行的函数中本地定义它,并确保在页面完全加载之前未调用该函数。


小智 5

我有一个类似的问题,但我有现有的 id,正如 egiray 所说,我在加载 DOM 之前调用了它,而 Javascript 控制台显示了同样的错误,所以我尝试了:

window.onload = (function(){myfuncname()});
Run Code Online (Sandbox Code Playgroud)

它开始工作。


Jam*_*ler 4

虽然理想情况下您应该突出显示导致错误的代码并将其发布在您的问题中,但该错误是因为您试图获取“status”元素的内部 HTML:

var idPost=document.getElementById("status").innerHTML;
Run Code Online (Sandbox Code Playgroud)

但是,您的 HTML 中不存在“status”元素- 要么添加必要的元素,要么更改您尝试查找的 ID 以指向有效元素。