2

好的,这是一个非常简单的场景,因为我刚开始使用 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;
}); 

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

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

4

1 回答 1

1

是的,所以我在这里找到了一个类似的问题,其中包含一些关于禁用 keyup 功能的答案:ASP.net MVC 3 jQuery Validation; 禁用不显眼的 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”属性添加到我的文本框中,在提交表单之前我不想触发验证,瞧。

于 2012-10-25T02:40:01.017 回答