我使用CustomValidator作为RadioButtonList而不是RequiredFieldValidator,这样我就可以使用Javascript分配CSS类。验证是检查是否至少选择了其中一个项目。这个人。代码不起作用:
JS:
function validateRadioButtonList() {
var target = document.getElementById('<%=rbGender.ClientID %>');
var radioButtons = target.getElementsByTagName('input');
var is_valid;
if (radioButtons[0].checked || radioButtons[1].checked) {
is_valid = true;
target.className = "";
}
else {
target.className = "validate";
is_valid = false;
}
args.IsValid = is_valid;
}
ASPX:
<asp:RadioButtonList ID="rbGender" runat="server" RepeatDirection="Horizontal"
RepeatLayout="Flow" AutoPostBack="false">
<asp:ListItem>Male </asp:ListItem>
<asp:ListItem>Female </asp:ListItem>
</asp:RadioButtonList>
<asp:CustomValidator ID="CustomValidator3" runat="server"
ControlToValidate="rbGender" ClientValidationFunction="validateRadioButtonList"
Text="*" ForeColor="Red"> </asp:CustomValidator>
<asp:Button ID="btnUpdate" runat="server" Text="Update"
ValidationGroup="vsGroup" />
生成的HTML:
<div class="">
<span id="ContentPlaceHolder1_rbGender">
<input id="ContentPlaceHolder1_rbGender_0" type="radio"
name="ctl00$ContentPlaceHolder1$rbGender" value="Male " />
<label for="ContentPlaceHolder1_rbGender_0">Male </label>
<input id="ContentPlaceHolder1_rbGender_1" type="radio"
name="ctl00$ContentPlaceHolder1$rbGender" value="Female " />
<label for="ContentPlaceHolder1_rbGender_1">Female </label>
</span>
<span style="float: right; margin-right: 3%">
<span id="ContentPlaceHolder1_CustomValidator3" style="color:Red;
visibility:hidden;">* </span>
</span>
</div>
但如果我包括
UseSubmitBehavior="False" OnClientClick="validateRadioButtonList()"
按钮,它的工作原理。我不想这样做。
答案 0 :(得分:0)
问题如下:
var target = document.getElementById(sender.controltovalidate);
哪个会找到广播组。每个收音机都应该有自己的ID,因为JS中的ID是唯一的。因此,您无法仅使用getElementById
选择所有单选对象的单选按钮。
你能告诉我控件生成的HTML吗?
修改强>
喜欢(但如果您更改控件名称,此名称也将更改,因为它是服务器生成的)。如果你能给它上课,那就更好了。
var target = document.getElementsByName("ctl00$ContentPlaceHolder1$rbGender")
答案 1 :(得分:0)
尝试不使用ASP验证器。它可以使用JavaScript解决。试试这个链接作为参考: http://www.felgall.com/javatip2.htm