javascript - 同一控件上的多个 ASP.NET 验证器 - Page_Validator.isValid 始终保持 true

标签 javascript asp.net validation

我使用此 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”,这是应该的。

请问为什么会出现这种情况?我该如何解决这个问题?谢谢。

最佳答案

如果我正确地阅读了这段密集的代码,那么您的代码将循环遍历每个验证器,然后获取关联控件的第一个验证器。

因此,一个控件可能有 3 个验证器,然后对于这三个验证器中的每一个,它将获得相同的控件,然后是该控件的第一个验证器。

而不是使用:

getValidatorUsingControl($(this).attr("ID"))

只需使用:

$('#' + Page_Validators[i])[0]

实际上,这行不通,因为当字段模糊时,我将超出范围或值发生变化,但请按照这些思路做一些事情。

关于javascript - 同一控件上的多个 ASP.NET 验证器 - Page_Validator.isValid 始终保持 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22042698/

相关文章:

c# - 为什么新的 AppDomain 会加载不必要的 DLL?

c# - 有没有办法在没有数据源的情况下将 LINQ 查询创建为变量(尚未)?

javascript - 如何通过回车键验证答案?

validation - Grails 域类验证器,属性必须大于另一个属性

javascript - 如何捕获 Chrome 字段验证错误事件

javascript - 如何使上面的图表响应窗口大小调整?

javascript - 使用 ng-class (AngularJS) 搜索 JSON 对象

javascript - Vue.js:如何在已打开的选项卡中打开外部链接?

asp.net - Windows服务与带有线程/计时器的asp.net Application_BeginRequest事件

javascript - 在赋值之前将元素 "known"设置为 JavaScript 中的函数