我通过破解jQuery Validate default options解决了这个问题。jQuery Validate 通过不显眼的验证在后台使用。
如果您在页面上只有一个表单要验证,您可以全局定义一个提交处理程序,该处理程序仅在提交有效表单时执行:
$.validator.setDefaults({
submitHandler: function (form, e) {
// your code
}
});
它必须在不显眼的初始化之前定义,该初始化发生在ready
. 否则您将不得不重新解析表单$.validator.unobtrusive.parse(selectorOfYourForm)
。
就我而言,有许多不同需求的表格,我使用了这样的东西:
let submitHandlers = [];
$.validator.setDefaults({
submitHandler: function (form, e) {
let result = true;
$.each(submitHandlers, function (i, submitHandler) {
result = submitHandler(form, e) && result;
});
return result;
}
});
function addUnobstrusiveValidationSubmitHandler(submitHandler) {
if (typeof submitHandler !== 'function') {
throw 'submitHandler must be a function';
}
submitHandlers.push(submitHandler);
}
我让每个submitHandler
人只负责处理它必须处理的表格。提交处理程序应该检查表单,return true;
如果它不是它应该处理的表单,则不做任何其他事情。因此,在意外表单上添加不良submitHandler
行为会弄乱其他表单或整个页面。
如果我们可以submitHandler
在parse
调用中定义 会更好,但目前这个调用不接受options
对象。
(还有一些选项可以通过将对象分配给 来全局定义,但除了和选项$validator.unobtrusive.options
之外,我没有找到太多关于此的文档,而且它似乎没有指定 a 的选项。据我所知,源,我们只能定义以下附加选项,匹配jQuery验证选项:和.)errorClass
errorElement
submitHandler
errorPlacement
invalidHandler
success