JavaScript: 类型错误:document.getElementById(...) 为空

3
以下是我的代码。
<html>

<head>
<script>
    var x = 5;
    var y = 6;
    var z = x + y;
    document.getElementById("add").innerHTML = z;
</script>
</head>

<body>
    <h1>Demo</h1>
<div id="demo">Addition of 5 and 6 is <span id="add"></span>
</div>

</body>

</html>

当我尝试在(span add)中显示z的值时,出现了以下错误。
 TypeError: document.getElementById(...) is null

请帮助我。


1
只需将页面底部的“script”块移动即可。 - Saqueib
2个回答

4

更改顺序:将脚本放在元素之后,这样在调用getElementById时它就被定义了。

<body>
    <h1>Demo</h1>
<div id="demo">Addition of 5 and 6 is <span id="add"></span>
</div>
<script>
    var x = 5;
    var y = 6;
    var z = x + y;
    document.getElementById("add").innerHTML = z;
</script>
</body>

另一种解决方案是使用jQuery的ready函数:
<script>
    $(function(){
        var x = 5;
        var y = 6;
        var z = x + y;
        $('#add').html(z); // if you use jQuery, you may as well do that
    });
</script>
</head>
<body>
    <h1>Demo</h1>
<div id="demo">Addition of 5 and 6 is <span id="add"></span>
</div>

</body>

如果需要一个常见问题解答,那么这个问题(以及关于回调中这个的问题)是为什么应该有一个常见问题解答的很好的论据。 - RobG
原因归结为:1.元素尚不存在,2.根本不存在具有该ID的元素,3.大小写错误(2的子集)。 - RobG

4
将您的代码添加到onload事件中,如下所示:

像这样

window.onload = function () {
    var x = 5;
    var y = 6;
    var z = x + y;
    document.getElementById("add").innerHTML = z;
}

示例:http://jsbin.com/luqeyo/1/edit?html,output

因为在文档准备好使用之前,您尝试调用文档。

更新:如果您不想等待加载所有资源(图像等),可以使用此方法。

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

  function ready() {
      var x = 5;
      var y = 6;
      var z = x + y;
      document.getElementById("add").innerHTML = z;
  }

Demo: http://jsbin.com/luqeyo/2/edit?html,output


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接