JavaScript / HTML:无法使用数组表示法访问无线电组元素

时间:2012-04-21 07:31:12

标签: javascript html forms dom

我想要的是:

if(document.forms[0].elements[0][1].checked)

OR

 if(document.forms[0].elements[0].[1].checked)

有效的是:

if(document.forms[0].rad[1].checked)

假设:

<h3>Who's Bill?</h3>
<input type="radio" value="0" name="rad">Bill Clinton
<input type="radio" value="1" name="rad">Bill Gates

2 个答案:

答案 0 :(得分:1)

好吧,你的第二个首选选项只是语法错误。它不会在任何情况下起作用,因为它违反了语言规则。

您首选的方法并非不合理,但请考虑您要求的是特定元素。即,表单中的第一个元素。该元素是一个单一的单选按钮,而不是它们的一组,因此,尽管语法可能是您的首选,但它实际上并不遵循您在代码中看到的内容。

它的工作方式是表单获取一个以无线电组名称命名的数组对象,并按照单选按钮实际出现的顺序填充该数组的子节点。

您也可以访问它们 document.forms[0].elements["rad"][0];//(1,2 ......等) 哪个可能对你感觉更好?我不知道......我不确定你的首选方法是什么,因此,很难说这是否会对你产生更大的吸引力。

答案 1 :(得分:0)

elements包含所有表单元素的数组。这意味着,当您指向document.forms[0].elements[0]时,您指向第一个单选按钮元素。当您使用document.forms[0].rad代替时,您指向name等于“rad”的元素:如果多个元素具有相同的名称,则返回的是元素数组。

因此,像document.forms[0].elements[0][1]这样的内容完全错误:您正在尝试访问名为“1”的属性到您的HTMLInputElement对象。此外,您需要在HTML代码中使用一个名称来“分组”无线电,否则可以将它们全部选中,而不是互相排斥。

如果你真的想要,你可以获得类似的东西,建立你自己的功能,有类似的东西:

var elements = getElements(document.forms[0]);

if (elements[0][1].checked)

但我没有看到好处。