document.getElementsByName返回的元素多于预期

时间:2010-04-21 18:37:50

标签: javascript asp.net html

我有一个RadioButtonList

<asp:radiobuttonlist runat="server" id="rblList">
    <asp:listitem>s1</asp:listitem>
    <asp:listitem>s2</asp:listitem>
    <asp:listitem>s3</asp:listitem>
    <asp:listitem>s4</asp:listitem>
</asp:radiobuttonlist>

在我的客户端代码中,我正在抓住像这样的单选按钮数组

var elements = document.getElementsByName("rblList");

为什么我得到5件而不是4件?它使elements像一个基于1的数组。

4 个答案:

答案 0 :(得分:2)

我的猜测是,您在页面上有另一个名为rblList的元素。使用以下测试:

   <asp:RadioButtonList ID="RadioButtonList1" runat="server">
        <asp:ListItem>S1</asp:ListItem>
        <asp:ListItem>S2</asp:ListItem>
        <asp:ListItem>S3</asp:ListItem>
        <asp:ListItem>S4</asp:ListItem>
    </asp:RadioButtonList>

    <script type="text/javascript">
        function test() {
            var foo = document.getElementsByName('<%=this.RadioButtonList1.UniqueID %>');
            alert(foo.length);
            return true;
        }
    </script>

我有四个元素。

答案 1 :(得分:1)

好的,所以RadioButtonList会产生以下HTML

<table id="rblList" border="0">
    <tr>
        <td><input id="rblList_0" type="radio" name="rblList" value="s1" /><label for="rblList_0">s1</label></td>
    </tr>
    <tr>
        <td><input id="rblList_1" type="radio" name="rblList" value="s2" /><label for="rblList_1">s2</label></td>
    </tr>
    <tr>
        <td><input id="rblList_2" type="radio" name="rblList" value="s3" /><label for="rblList_2">s3</label></td>
    </tr>
    <tr>
        <td><input id="rblList_3" type="radio" name="rblList" value="s4" /><label for="rblList_3">s4</label></td>
    </tr>
</table>

根据MSDN,我得到了5个元素,因为我正在获取单选按钮和ASP.Net所在的表:

http://msdn.microsoft.com/en-us/library/ms536438%28VS.85%29.aspx

  

使用getElementsByName方法时,文档中的所有元素   具有指定的NAME属性   或返回ID属性值。

所以,在页面上放一些javaScript:

function showEle() {
    var elements = document.getElementsByName("rblList");

    alert("elements length=" + elements.length);

    for (var i = 0; i < elements.length; i++) {
        try {
            alert("elements[" + i + "]" + ", id=" + elements[i].id + ", name=" + elements[i].name + ", value = " + elements[i].value);
        }
        catch (ex) {
            alert("error reading elements[" + i + "].value");
        }
    }
}

我能看到这个......

elements [0],id = rblList,name = undefined,value = undefined
elements [1],id = rblList_0,name = rblList,value = s1
elements [2],id = rblList_1,name = rblList,value = s2
elements [3],id = rblList_2,name = rblList,value = s3
elements [4],id = rblList_3,name = rblList,value = s4

表是

element[0],其他是单选按钮

答案 2 :(得分:0)

尝试查看代码创建的HTML(即“查看源代码”)。可能该元素没有名称 rblList,而是 id 。在这种情况下,我建议使用getElementsByID

答案 3 :(得分:0)

你的代码中有一个runat =“server”和许多asp-tags ......这意味着你的代码示例是服务器端代码,在发送给客户端之前将用html替换。

查看你的HTML,你会找到原因!

...并检查“name”属性... getElementsByName返回具有特定“name”属性的所有元素。可能有几个。

如果你想按ID(唯一)选择它是getElementByID(没有元素的复数')。