我无法从元素ID数组中引用checkbox元素。为什么我可以使用文字和字符串var作为getElementById的参数来引用它,而不是使用数组的元素?
<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
答案 0 :(得分:1)
当我进入你的测试页面时,当我这样做时
zips = document.getElementById("zip_wrapper").innerText.split(" ");
在控制台中,我将zips作为长度为1的元素,因此zips[1]
将是未定义的。似乎(至少在Chrome中)innerText会在自己的行上返回每一个。我分开了\ n,我得到了:
["72002", "72034", ""]
我认为问题的根本不在于你是在使用数组中的元素,而是你的数组不像你期望的那样构成。
正如Pointy指出的那样,Firefox似乎只返回undefined,我发现Chrome会在每条线路上返回它们(即用“\ n”分隔,最后用空字符串)。
你可能需要一种与你想要完成的方法不同的方法,但对原始问题的答案是,使用数组元素作为getElementById的参数没有任何问题。
答案 1 :(得分:0)
参数必须是字符串文字,例如
wanted=document.getElementById("myhtmlobject").value
所以如果你有一个类似对象的数组,而不只是一个,
myhtmlobject[1]
myhtmlobject[2]
myhtmlobject[3]
myhtmlobject[4]
etc
然后像这样引用它们
myobj="myhtmlobject[" + j + "]"
wanted= document.getElementById(myobj).value