0

我为 RadioButtonList 使用 CustomValidator,而不是 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&nbsp;&nbsp;</asp:ListItem>
  <asp:ListItem>Female&nbsp;&nbsp;</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()"

对于按钮,它可以工作。我不想这样做。

4

2 回答 2

0

问题如下:

var target = document.getElementById(sender.controltovalidate);

哪个会找到广播组。每个收音机都应该有自己的 ID,因为 JS 中的 ID 是唯一的。因此,您不能选择仅getElementById返回单个对象的所有单选按钮。

你能告诉我由控件生成的 HTML 吗?

编辑

喜欢(但如果您更改控件名称,此名称也会更改,因为它是服务器生成的)。如果能给它上一堂课就更好了。

var target = document.getElementsByName("ctl00$ContentPlaceHolder1$rbGender")
于 2013-08-26T12:27:31.750 回答
0

在没有 ASP 验证器的情况下试一试。只需使用 JavaScript 即可解决。试试这个链接作为参考: http ://www.felgall.com/javatip2.htm

于 2013-08-26T13:13:06.227 回答