我有以下非常简单的代码:
<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
进行测试。
答案 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