我正在使用此JavaScript代碼以在驗證失敗後突出顯示文本框和其他控件(指定了ASP.NET驗證器)。同一控件上的多個ASP.NET驗證器 - Page_Validator.isValid始終保持爲真
<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」,因爲它應該是。
爲什麼會發生這種情況?我該如何解決這個問題?謝謝。