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

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

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

这是我刚刚攻击的东西,它包装了原始的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和不显眼的validation。

当表单无效时,使用$.validator执行一些附加function…

 $('form:first').bind("invalid-form.validate", function () { alert("invalid!"); });