【问题标题】:Client Side Validation on submit only仅在提交时进行客户端验证
【发布时间】:2012-10-25 00:58:52
【问题描述】:

好的,这是一个非常简单的场景,因为我刚开始使用 MVC,所以我无法弄清楚。我创建了一个自定义密码验证器来同时使用客户端和服务器端。与此同时,客户端验证器只检查长度(一旦我让它工作,它会做更多的事情)。服务器端验证工作正常。这是客户端实现

$.validator.unobtrusive.adapters.add("password",
    function (options) {
        options.rules['password'] = {};
        options.messages['password'] = options.message;
    }
);
$.validator.addMethod("password", function (value, element, params) {
    if (value.length < 8 || value.length > 15) {
        return false;
    }
    return true;
}); 

我只希望在提交表单时触发此验证器。

目前,一旦您开始输入,它就会告诉您密码无效,直到密码满足长度要求。我希望它像我在其他表单字段上使用的标准“必需”验证器一样,它们只在提交表单后验证输入。

【问题讨论】:

    标签: asp.net-mvc-3 validation client-side


    【解决方案1】:

    是的,所以我在这里找到了一个类似的问题,其中包含一些关于禁用 keyup 功能的答案:ASP.net MVC 3 jQuery Validation; Disable Unobtrusive OnKeyUp? 但我找到了另一种方法,它不涉及编写额外的 javascript 行或关闭所有字段的功能.基本上,我只是更改了jquery.validation.js 文件中的实际函数以检查名为nokeyup 的属性,如果找到则返回。您可以在离文件开头不远的地方找到 onkeyup 函数。原来是这样的

    onkeyup: function(a, b) {
        if ( b.which === 9 && this.elementValue(a) === '' ) {
            return;
        }
        else if ( a.name in this.submitted || a=== this.lastActive ) {
            this.element(a);
        }
    },
    

    所以我改成

    onkeyup: function (a, b) {
        if (b.which === 9 && this.elementValue(a) === "") { 
            return;
        }
        else if (a.getAttribute('nokeyup')) { // Added this statement
            return;
        } 
        else if ( a.name in this.submitted || a=== this.lastActive ) {
            this.element(a);
        }
    },
    

    之后我要做的就是将“nokeyup”属性添加到我不想触发验证的文本框中,直到表单提交和瞧。

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2014-01-27
      • 2013-07-10
      • 2017-11-01
      • 2015-02-04
      相关资源
      最近更新 更多