我有一组单选按钮,我正在尝试使用ASP中的自定义验证器进行验证。我知道我不能在这些项目上使用必需的验证器,因为它们不符合ASP.Net中的必需验证器,我不能使用单选按钮列表,因为我有一个div,显示在单选按钮之间点击它们
<asp:RadioButton ID="showYear" runat="server" CssClass="reportYear" GroupName="dateSelection"/>Show by calendar year
//// Div to show if showYear is Clicked
<asp:RadioButton ID="showDate" runat="server" CssClass="reportDates" GroupName="dateSelection"/>Show by date range
//// Div to show if showDate is Clicked
这是自定义验证器:
<asp:CustomValidator ID="validateGroup1" runat="server" Display="Dynamic" ErrorMessage="Please select option for step 1" ClientValidationFunction="validateDateStyle" ValidationGroup="validateYTDSearch" />
我遇到的问题是这个javascript函数:
function validateDateStyle(oSrc, args) {
$(document).ready(function () {
var r1 = $('.reportDates').attr('checked');
var r2 = $('.reportYear').attr('checked');
alert(r1 + " " + r2);
});
}
在使用验证器调用触发该功能时,它会弹出窗口
“Undefined Undefned”即使检查无线电也是如此。
为什么它不能正确拉出检查值?
由于
答案 0 :(得分:2)
您可以使用jQuery .is()
函数并使用:checked
伪选择器检查单选按钮的已检查状态:
if($('.reportDates').is(':checked')) {
// do stuff
}
答案 1 :(得分:0)
在尝试引用“checked”属性时获得未定义的原因是因为未选中/选择单选按钮元素时该属性不存在。每次选择/取消选择时,浏览器都会分别添加/删除该属性。
您最有可能要验证的是选择了一个单选按钮。如果您愿意,可以检查每个单选按钮的已检查状态,但如果您以后添加或删除单选按钮,则必须在两个位置更改代码。
相反,您可以使用更简单的解决方案,类似于Krof在其解决方案中提供的解决方案。例外是您检查单选按钮组。由于该组不是实际的html元素,因此必须按组名称选择元素。当您的页面呈现为html页面时,组名称将由“name”属性选择,如此。
$('[name$="dateSelection"]')
“$ =”运算符只是转换为“以...结尾”,因为ASP.Net可能在名称前加上内容面板ID或类似的东西。这有点像作弊,但这是一种选择你想要的简单方法。
你得到的是一组radiobuttons,它们的属性为“name”,其值以“dateSelection”结尾。
现在要确定是否在组中选择了单选按钮,您可以这样做:
$('[name$="dateSelection"]').is(':checked');
结果值告诉您组中的单选按钮是否被选中,并且是比检查每个单独的单选按钮状态更优雅的解决方案。更不用说,稍后添加/删除按钮时容易出错。