appendchild出错

时间:2014-05-20 14:56:14

标签: javascript arrays

我有以下非常简单的代码:

<html>
<head>
  <script type="text/javascript" >

    function showAlert(){
      alert("I am clicked");
    }

    function one(){
      var a1 = [1,2,3];
      for (var i=0;i<a1.length;i++) {
        var p = document.createElement('p');
        p.innerHTML = a1[i];
        p.onclick = showAlert;
        document.body.appendChild(p);
      }

      console.log("I am called");
    }

    one();   
  </script>
</head>
</html>

我收到以下错误:Uncaught TypeError: Cannot read property 'appendChild' of null。任何人都可以告诉我,我哪里错了?我正在Chrome进行测试。

3 个答案:

答案 0 :(得分:4)

document.body.appendChild在定义正文之前运行,因此document.body仍为null

将此脚本移至<body></body>下或延迟执行:

window.addEventListener("load", function () { /* we're ready */ });

答案 1 :(得分:2)

document.body.appendChild(p)

在这一行。前几天我遇到了同样的问题。 如果您将脚本放在标记正文之前,就会发生这种情况。

<html>
<head>
<script type="text/javascript" >

    function showAlert(){
                    alert("I am clicked");
                    }


    function one(){
            var a1 = [1,2,3];
                    for (var i=0;i<a1.length;i++) {
                    var p = document.createElement('p');
                    p.innerHTML = a1[i];
                    p.onclick = showAlert;
                    document.body.appendChild(p);
                    }

            console.log("I am called");
            }

            one();


     </script>
 </head>
 </html>

不行。 如果你把它的函数调用放在标签之后就可以了。

<html>
 <head>
    <script>

    function showAlert(){
                    alert("I am clicked");
                    }


    function one(){
            var a1 = [1,2,3];
                    for (var i=0;i<a1.length;i++) {
                    var p = document.createElement('p');
                    p.innerHTML = a1[i];
                    p.onclick = showAlert;
                    document.body.appendChild(p);
                    }

            console.log("I am called");
            }

    </script>
 </head>
 <body>

 <body>
<script type="text/javascript" >
            one();
     </script>
 </html>

在您的背景下,&#34;身体&#34;但尚未初始化,因此它为空

答案 2 :(得分:0)

您似乎错过了HTML中的body标记。所以document.body为null