【发布时间】:2011-08-15 14:41:51
【问题描述】:
我尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,所以我在页面上出现错误之前进行检查。在客户端验证发生后,我正在寻找某种方式来运行我的脚本。
我在我的 VM 上使用带有 DataAnnotation 属性的 MVC 2。
【问题讨论】:
标签: jquery forms validation asp.net-mvc-2 data-annotations
我尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,所以我在页面上出现错误之前进行检查。在客户端验证发生后,我正在寻找某种方式来运行我的脚本。
我在我的 VM 上使用带有 DataAnnotation 属性的 MVC 2。
【问题讨论】:
标签: jquery forms validation asp.net-mvc-2 data-annotations
这是我刚刚破解的东西,它包装了原始的 parseElement 和 invalidHandler 函数,允许您添加自己的逻辑。
(function($) {
$.validator.unobtrusive.parseElement = (function (original) {
return function (element, skipAttach) {
original.call(this, element, skipAttach);
var form = $(element).parents("form:first")[0];
var validationInfo = $(form).data('unobtrusiveValidation');
if (validationInfo) {
var handler = validationInfo.options.invalidHandler;
var newhandler = function () {
console.log('Here is where you can do additional handling');
handler.call(this);
};
validationInfo.options.invalidHandler = $.proxy(newhandler, form);
} else {
// this didn't work.
}
}
})($.validator.unobtrusive.parseElement);
})(jQuery);
但请注意,这是一个即时函数,而不是等效于 document.onload 的 jQuery 函数。
这是替换 $.validator.unobtrusive.parseElement 用一个新函数调用原始函数以确保将 validationInfo.options.invalidHandler 应用于父表单,然后允许您使用 @987654326 包装该处理程序@函数。
编辑: 上述答案仅适用于 MVC3 和不显眼的验证。
在表单无效时使用$.validator 执行一些附加功能...
$('form:first').bind("invalid-form.validate", function () {
alert("invalid!");
});
【讨论】:
MicrosoftMvcJqueryValidation.js 处理ajax 提交。如果您使用它而不是 jquery.validate,我可以跟踪该文件并查看一下。