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

时间:2012-01-25 13:10:08

标签: javascript properties innerhtml typeerror

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

  

未捕获的TypeError:无法读取null

的属性'innerHTML'

website上查看 这是导致错误的行:

var idPost=document.getElementById("status").innerHTML;

由于

8 个答案:

答案 0 :(得分:22)

var idPost=document.getElementById("status").innerHTML;

网页中不存在“status”元素。

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

你应该添加这样的条件:

if(document.getElementById("status") != null){
    var idPost=document.getElementById("status").innerHTML;
}

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

答案 1 :(得分:20)

更新

问题不是要求jquery。所以让我们不用jquery来做:

document.addEventListener("DOMContentLoaded", function(event) { 
    //Do work
});

注意此方法不适用于IE8。

旧答案:

在DOM准备好之前,您正在调用此脚本。如果将此代码写入jquery的$(function()方法,它将起作用。

答案 2 :(得分:4)

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

var idPost=document.getElementById("status").innerHTML;

然而,HTML中的“status”元素不存在 - 添加必要的元素或更改您尝试定位的ID以指向有效元素。

答案 3 :(得分:4)

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

    <html>
    <body>
    <p>asdasd</p>
    <p>asdasd</p>
    <p>asdasd</p>
    <script src="myfile.js"></script>
    </body>
    </html>

答案 4 :(得分:4)

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

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

它开始工作

答案 5 :(得分:3)

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

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

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

这在HTML文件中:

<body onload="updateVariables()">

如果你已经有了onload功能,你可以添加额外的一行或者调用该功能。

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

答案 6 :(得分:0)

//Run with this HTML structure
<!DOCTYPE html>
<head>
    <title>OOJS</title>

</head>
<body>
    <div id="status">
    </div>
    <script type="text/javascript" src="scriptfile.js"></script>
</body>
</html>

答案 7 :(得分:0)

看起来脚本在DOM加载之前执行。 尝试异步加载脚本。

 <script src="yourcode.js" async></script>