2012-12-07 27 views
0

谁能告诉我为什么我可能会得到这个错误?TypeError document.getElementByID()...为空?

"TypeError: document.getElementById(...) is null @ line:25"

我使用的JavaScript,这是我到目前为止,我<script>标签内...

var initBoard = new Array(new Array(0, 0, 0, 1), 
         new Array(0, 0, 0, 0), 
         new Array(3, 0, 0, 0), 
         new Array(0, 0, 2, 0) 
); 

function insertData(){ 
for(var i = 0; i < 4; i++){ 
    for(var j = 0; j <4; j++){ 
     document.getElementById(i.j).innerHTML = initBoard[i][j]; 

    } 
} 
} 

下面,我的HTML <body>我有这里面....

<table border="2" > 
<tr align="center"> 
<td><div id="00">0</div></td> 
<td><div id="01">0</div></td> 
<td><div id="02">0</div></td> 
<td><div id="03">0</div></td> 
</tr> 

<tr align="center"> 
<td><div id="10">0</div></td> 
<td><div id="11">0</div></td> 
<td><div id="12">0</div></td> 
<td><div id="13">0</div></td> 
</tr> 

<tr align="center"> 
<td><div id="20">0</div></td> 
<td><div id="21">0</div></td> 
<td><div id="22">0</div></td> 
<td><div id="23">0</div></td> 
</tr> 

<tr align="center"> 
<td><div id="30">0</div></td> 
<td><div id="31">0</div></td> 
<td><div id="32">0</div></td> 
<td><div id="33">0</div></td> 
</tr> 

当我尝试运行这个时,我从上面得到这个错误。

我也试过只是将“ID”硬编码为'00''01',它仍然给我相同的错误信息。

有谁知道我在做什么错?我看遍了各处,到处都说基本上是一样的东西,它应该很容易,但我无法超越这个。

编辑:第25行是document.getElementById(i.j).innerHTML = initBoard[i][j];

+2

除了下面的答案,请确保你在一个onload处理程序中运行所有这些。如果运行得太早,ID尚未定义。 – DrC

+0

@DrC:做得很好。如果代码在元素呈现之前运行,则不会找到任何内容。 –

+0

@DrC我认为这可能会发生,因为即使下面的答案和我硬编码的ID而不是使用i.j,我仍然会得到同样的结果。我可以这样做吗? –

回答

3

希望将数字转换为字符串,将它们连接起来。

document.getElementById(i + "" + j).innerHTML = ... 

你有i.j,这将需要通过i引用的次数,并请它替其j属性,这将返回undefined

+1

+1,[可以使用示例](http://jsbin.com/unehah/1/edit)。 –

2

是的 - 同样的问题发生在我身上一次。问题是:

ID和名称标记必须以字母([A-Za-z])开头,后面可以跟随任意数量的字母,数字([0-9]),连字符(“ - “),下划线(”_“),冒号(”:“)和句点(”。“)。

所以你必须更换指定的ID

自己的方式也 - 你i.j的做法是不正确

+2

虽然HTML 4不允许以数字开头的ID,但HTML5确实允许。即使在不支持HTML5的旧浏览器中,DOM选择仍可能正常工作。 –

+0

不知道有关html 5的事情 - 谢谢。我曾经有过使用id的方法曾经遇到过一个问题,但也许我正在做一些更复杂的事情,可能涉及jquery。 –

2

确保代码执行后的文档完全加载。像

window.addEventListener("load", function() { 
    <your current code> 
},0); 

正如其他海报说的东西,使用类似“细胞” + I +“_” + J也是一个不错的主意。我会把下划线放在“111”不含糊的地方。

相关问题