我有一个使用母版页的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在页面转换为使用母版页之前引用数组。我怎么能这样做?
答案 0 :(得分:2)
这是ASP.NET的一部分,一直很困难。您需要具有引用动态创建的元素ID的静态javascript!
这就是我一直解决问题的方法:
将RadioButtonList
换成div
或p
或其他任何内容:
<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";
}