0

要素IDの配列からチェックボックス要素を参照するのに問題があります。getElementByIdのパラメーターとしてリテラルと文字列varを使用して参照できるのに、配列の要素を使用して参照できないのはなぜですか?

<html>
<body>

<ul id="zip_wrapper">
<li><label><input type="checkbox" id="72002" value="72002" name="zip_codes[]" checked="checked">72002</label></li>
<li><label><input type="checkbox" id="72034" value="72034" name="zip_codes[]" checked="checked">72034</label></li>
</ul>
<script>

var zips = "";
var tester = "72034";
zips = document.getElementById("zip_wrapper").innerText.split(" ");

//zips =  Array.prototype.slice.call(zips); //a la http://stackoverflow.com/questions/4287681/extremely-annoying-javascript-array-object-error

document.write("zips array, tokenized by split(\" \"): " + zips + "<br />");

document.write("document.getElementById(\"72034\").checked: " + document.getElementById("72034").checked + "<br />");
document.write("document.getElementById(tester).checked: " + document.getElementById(tester).checked + "<br />");
document.write("document.getElementById(zips[1]).checked: " + document.getElementById(zips[1]).checked + "<br />");

</script>
</body>
</html>

ここで実際のページを見ることができます:https ://dl.dropbox.com/u/1634015/website/checked.html

4

2 に答える 2

1

私があなたのテストページに行くとき、私がするとき

zips = document.getElementById("zip_wrapper").innerText.split(" ");

コンソールでは、長さ1の要素としてzipを取得しているため、zips[1]未定義になります。(少なくともChromeでは)innerTextがそれぞれを独自の行で返しているようです。\ nで分割すると、次のようになります。

["72002", "72034", ""]

肝心なのは、問題は配列の要素を使用しているということではなく、配列が期待どおりに構成されていないということだと思います。

そして、Pointyが指摘したように、Firefoxは未定義を返すだけのようで、Chromeはそれぞれの行でそれらを返すことがわかりました(つまり、末尾が空の文字列で「\ n」で区切られています)。

達成しようとしていることに対して別のアプローチが必要になる場合がありますが、元の質問に対する答えは、getElementByIdのパラメーターとして配列要素を使用することに何の問題もないということです。

于 2012-06-11T21:53:27.667 に答える
0

引数は文字列リテラルである必要があります。

wanted=document.getElementById("myhtmlobject").value

したがって、1つだけではなく、類似したオブジェクトの配列がある場合は、

myhtmlobject[1]
myhtmlobject[2]
myhtmlobject[3]
myhtmlobject[4]
etc

次に、このようにそれらを参照します

myobj="myhtmlobject[" + j + "]"
wanted= document.getElementById(myobj).value
于 2012-08-29T21:44:50.680 に答える