数组元素作为getElementById()的参数。已选中

时间:2012-06-11 21:50:07

标签: javascript getelementbyid

我无法从元素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

2 个答案:

答案 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