我正在使用此JavaScript代码,以便在验证失败后突出显示文本框和其他控件(指定了ASP.NET验证程序)。
<script src="_scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
HighlightControlToValidate();
$('#<%=btnSave.ClientID %>').click(function() {
if (typeof (Page_Validators) != "undefined") {
for (var i = 0; i < Page_Validators.length; i++) {
if (!Page_Validators[i].isvalid) {
$('#' + Page_Validators[i].controltovalidate).css("background", "#f3d74f");
}
else {
$('#' + Page_Validators[i].controltovalidate).css("background", "white");
}
}
}
});
});
function HighlightControlToValidate() {
if (typeof (Page_Validators) != "undefined") {
for (var i = 0; i < Page_Validators.length; i++) {
$('#' + Page_Validators[i].controltovalidate).blur(function() {
var validatorctrl = getValidatorUsingControl($(this).attr("ID"));
if (validatorctrl!= null && !validatorctrl.isvalid) {
$(this).css("background", "#f3d74f");
}
else {
$(this).css("background", "white");
}
});
}
}
}
function getValidatorUsingControl(controltovalidate) {
var length = Page_Validators.length;
for (var j = 0; j < length; j++) {
if (Page_Validators[j].controltovalidate == controltovalidate) {
return Page_Validators[j];
}
}
return null;
}
</script>
只要在同一控件上指定的ASP.NET验证程序不超过一个,此脚本就可以正常工作。不幸的是,如果在同一个控件上指定了多个ASP.NET验证器并且验证失败,则不会突出显示相关控件。
使用Chrome开发人员工具进行调试后,我发现只要在同一个控件上指定了多个ASP.NET验证器,所讨论的ASP.NET验证器的isValid属性始终设置为“true”,即使验证失败。如果同一控件上的ASP.NET验证器缩减为一个验证器,则验证失败时isValid属性将设置为“false”,应该如此。
为什么会这样?我怎么解决这个问题?感谢。
答案 0 :(得分:1)
如果我已正确读取密码,您的代码将循环遍历每个验证器,然后获取相关控件的第一个验证器。
因此,一个控件可能有3个验证器,然后对于这三个验证器中的每一个,它将获得相同的控件,然后是该控件的第一个验证器。
而不是使用:
getValidatorUsingControl($(this).attr("ID"))
只需使用:
$('#' + Page_Validators[i])[0]
实际上,这不起作用,因为我会超出范围或在字段模糊时更改值,但是按照这些方式做一些事情。