好的,所以这是一个非常简单的场景,因为我刚刚开始使用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;
});
我只希望在提交表单时触发此验证器。
目前,只要您开始输入,它就会告诉您密码无效,直到密码符合长度要求为止。我希望它像我在其他表单字段中使用的标准“必需”验证器一样,只有在提交表单后才会验证输入。
答案 0 :(得分: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'属性,我不想在表单提交之前激活验证。