for ループで id と name の 2 つの属性を呼び出して DOM を組み合わせると、いくつかの問題が発生します。
テーブルを含む html セクションがあり、各セルには独自の ID がありますが、name 属性は同じです。
<td id="p1" name="f" ></td>
<td id="p2" name="f" ></td>
...
<td id="p47" name="f" ></td>
次の関数を使用して、これらのセルに画像をランダムに配置します。
function begintest () {
var i;
var randnum;
var randnum2;
for(i=1;i<48;i++) {document.getElementById("p" + i).name="f";
for(i=1;i<22;i++) {
randnum = Math.floor(Math.random() * 6) + 1; //picture of one sort
randnum2 = Math.floor(Math.random() * 47) + 1; //random position between 1-47
while(document.getElementById("p" + randnum2).name=="t") { //check whether position taken
randnum2 = Math.floor(Math.random() * 47) + 1; //random position between 1-47
}
document.getElementById("p" + randnum2).name = "t"; //true
document.getElementById("p" + randnum2).style.backgroundImage = "url(i" + randnum + ".png)"; //put in image first sort
}
for(i=1;i<48;i++) { //picture of second sort
if(document.getElementById("p" + i).name=="f") { //if not filled with first sort
randnum = Math.floor(Math.random() * 26) + 7; //take second sort
document.getElementById("p" + i).style.backgroundImage = "url(i" + randnum + ".png)"; //put in image second sort
}
}
}
それでも、私は常にデバッグ情報を取得します:
TypeError: document.getElementById(...) は、if(document.getElementById("p" + i).name=="f") のように、2 つの属性を持つ DOM 参照が使用される関数では null です。
どうすればいいの?それを処理する別の方法はありますか?