2012-12-07 34 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」不含糊的地方。

相關問題