如果存在DataAnnotation验证错误,如何禁用表单的提交按钮?

时间:2011-08-15 14:41:51

标签: jquery forms validation asp.net-mvc-2 data-annotations

我尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,因此我在页面上出现错误之前进行检查。我正在寻找一些在客户端验证发生后运行我的脚本的方法。

我在我的VM上使用MVC 2和DataAnnotation属性。

1 个答案:

答案 0 :(得分:1)

以下是我刚刚攻击的内容,它包含原始的parseElementinvalidHandler函数,允许您添加自己的逻辑。

(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!"); 
 });