TypeError document.getElementByID() ... 为空?

Posted

技术标签:

【中文标题】TypeError document.getElementByID() ... 为空?【英文标题】:TypeError document.getElementByID() ... is null? 【发布时间】:2012-11-26 04:53:47 【问题描述】:

谁能告诉我为什么会出现这个错误?

"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 &lt;body&gt; 的下面我有这个....

<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];

【问题讨论】:

除了下面的答案之外,请确保您在 onload 处理程序中运行所有这些。如果运行得太早,则 ID 尚未定义。 @DrC:说得很好。如果代码在元素渲染之前运行,则不会找到任何内容。 @DrC 我认为这可能正在发生,因为即使使用下面的答案并且我在 ID 中硬编码而不是使用 i.j,我仍然会得到同样的结果。我可以这样做吗? 我会写一个简短的答案。 【参考方案1】:

您想将数字转换为字符串并将它们连接起来。

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

您有i.j,它将获取i 引用的数字,并要求它提供其j 属性,该属性将返回undefined

【讨论】:

【参考方案2】:

是的 - 我曾经遇到过同样的问题。问题是:

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。

因此,您将不得不更换分配 ID 的方式

另外 - 你的 i.j 方法不正确

【讨论】:

虽然 HTML 4 确实不允许 ID 以数字开头,但 HTML5 确实允许。即使在不支持 HTML5 的旧浏览器中,DOM 选择仍然可以工作。 不知道 html 5 的事情 - 谢谢。我确实有一次使用 id 的方法有问题,但也许我正在做一些更复杂的事情,可能涉及 jquery。【参考方案3】:

确保代码在文档完全加载后执行。类似的东西

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

正如其他海报所说,使用“cell”+i+“_”+j 之类的东西也是一个好主意。我会加上下划线,这样“111”就不会模棱两可了。

【讨论】:

以上是关于TypeError document.getElementByID() ... 为空?的主要内容,如果未能解决你的问题,请参考以下文章

DOM节点操作

表单中常用的函数语句

canvas添加水印

DOM基础方法

Js学习

JS DOM