通过母版页获取单选按钮的值

时间:2009-01-19 21:59:16

标签: asp.net javascript

我有一个使用母版页的aspx页面。在这个页面上,我有一组单选按钮。我需要在javascript中获取单选按钮组中每个元素的checked属性。在页面转换为使用母版页之前,以下javascript代码工作正常:

if((!f.rblRegUseVehicles[0].checked) && (!f.rblRegUseVehicles[1].checked))
{
    isValid = "false";
}

f是对表单的引用。这很好用。

当页面被归档以使用母版页时,我将javascript更改为以下内容:

if((!f.<%=rblRegUseVehicles.ClientID%>[0].checked) && (!f.<%=rblRegUseVehicles.ClientID%>[1].checked))
{
    isValid = "false";
}

现在,javascript失败了,因为它找不到元素。在“查看源代码”中,我有名称为

的元素
<input id="ctl00_cphContent_rblRegUseVehicles_0" type="radio" name="ctl00$cphContent$rblRegUseVehicles" value="Yes" />

<input id="ctl00_cphContent_rblRegUseVehicles_1" type="radio" name="ctl00$cphContent$rblRegUseVehicles" value="No" />

唯一有效的代码是

document.<%=Form.ClientID%>.<%=rblRegUseVehicles.ClientID%>_0.checked

我希望javascript在页面转换为使用母版页之前引用数组。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

这是ASP.NET的一部分,一直很困难。您需要具有引用动态创建的元素ID的静态javascript!

这就是我一直解决问题的方法:

RadioButtonList换成divp或其他任何内容:

<div id="yourId">
    <asp:RadioButtonList id="radiolist1" runat="server">
        <!-- ... -->
    </asp:RadioButtonList>
</div>

其中呈现的内容如下:

<div id="yourId">
    <table id="radiolist1" border="0">
        <tr>
            <td>
                <input id="radiolist1_0" type="radio" name="radiolist1" value="Item 1" checked="checked" />
                <label for="radiolist1_0">Item 1</label>
            </td>
        </tr>
        <tr>
            <td>
                <input id="radiolist1_1" type="radio" name="radiolist1" value="Item 2" />
                <label for="radiolist1_1">Item 2</label>
            </td>
        </tr>
    </table>
</div>

这样您就可以使用一个针对yourId的静态javascript函数,该函数不会获得runat="server"。然后你的javascript看起来像这样:

var rbl = document.getElementById("yourId");            
isValid = (!rbl.getElementsByTagName("input")[0].checked 
    && !rbl.getElementsByTagName("input")[1].checked);

答案 1 :(得分:1)

如果你想探索使用jQuery而不是直接javascript的想法,这应该可以解决这个问题。

if ( $('input[id*=rblRegUseVehicles]:checked').length < 0 ) isValid = "false";

选择器获取所有已检查的radiobuttons,其id包含'rblRegUseVehicles'。

修改

如果您想坚持原始脚本,可以使用UniqueID而不是ClientID

if((!f.<%=rblRegUseVehicles.UniqueID%>[0].checked) && (!f.<%=rblRegUseVehicles.UniqueID%>[1].checked))
{
    isValid = "false";
}