我尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,因此我在页面上出现错误之前进行检查。我正在寻找一些在客户端验证发生后运行我的脚本的方法。
我在我的VM上使用MVC 2和DataAnnotation属性。
答案 0 :(得分:1)
以下是我刚刚攻击的内容,它包含原始的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);
请注意,这是一个立即函数,而不是jQuery函数,它等同于document.onload。
这是使用调用原始函数的新函数替换 $.validator.unobtrusive.parseElement
以确保validationInfo.options.invalidHandler
应用于父表单,然后允许您包装该处理程序使用newhandler
函数。
修改: 以上答案仅适用于MVC3和不引人注意的验证。
当表单无效时,使用$.validator
执行一些其他功能...
$('form:first').bind("invalid-form.validate", function () {
alert("invalid!");
});