Jquery 如何禁用表单';如果存在DataAnnotation验证错误,请单击“提交”按钮?
我已尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,所以我在错误出现在页面上之前进行检查。我正在寻找在客户端验证完成后运行脚本的方法Jquery 如何禁用表单';如果存在DataAnnotation验证错误,请单击“提交”按钮?,jquery,forms,validation,asp.net-mvc-2,data-annotations,Jquery,Forms,Validation,Asp.net Mvc 2,Data Annotations,我已尝试绑定到表单中所有输入的更改事件,并检查页面上是否有任何验证消息。问题是验证似乎发生在更改事件之后,所以我在错误出现在页面上之前进行检查。我正在寻找在客户端验证完成后运行脚本的方法 我在我的虚拟机上使用带有DataAnnotation属性的MVC 2。我刚刚拼凑了一个东西,它包装了原始的parseElement和invalidHandler函数,允许您添加自己的逻辑 (function($) { $.validator.unobtrusive.parseElement = (fun
我在我的虚拟机上使用带有DataAnnotation属性的MVC 2。我刚刚拼凑了一个东西,它包装了原始的
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
应用于父窗体,从而允许您使用newhandler
函数包装该处理程序
编辑:
上述答案仅适用于MVC3和不引人注目的验证。
要在表单无效时使用$.validator
执行一些附加功能
$('form:first').bind("invalid-form.validate", function () {
alert("invalid!");
});
这里是我刚刚拼凑的东西,它包装了原始的
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
应用于父窗体,从而允许您使用newhandler
函数包装该处理程序
编辑:
上述答案仅适用于MVC3和不引人注目的验证。
要在表单无效时使用$.validator
执行一些附加功能
$('form:first').bind("invalid-form.validate", function () {
alert("invalid!");
});
我注意到您的代码中有“unobtrusive”一词——我担心您的解决方案依赖于unobtrusive JS支持,我理解这是MVC 3的一部分,而不是2。威尔:我道歉。我读到你文章的最后一行是MVC3,带有DataAnnotations属性(HTML5,不引人注目)。我想星期一早上我应该休息一下。我用一个将功能绑定到无效表单的示例更新了答案。这样,当表单被标记为无效时,您可以运行自己的脚本。我希望这更接近你的问题,不是问题。修改后的解决方案中的代码是否依赖于任何插件?对我来说,回调似乎永远不会被触发。再次感谢@威尔,对不起,我以前没看到你的问题。这确实依赖于jquery.validate插件,这是MVC2RTM客户端验证的默认插件。还有一个处理ajax提交的
MicrosoftMvcJqueryValidation.js
。如果您使用它而不是jquery.validate,我可以跟踪文件并查看一下。我注意到您的代码中有“unobtrusive”一词——我担心您的解决方案依赖于unobtrusive JS支持,据我所知,它是MVC 3的一部分,而不是MVC 2的一部分。威尔:我道歉。我读到你文章的最后一行是MVC3,带有DataAnnotations属性(HTML5,不引人注目)。我想星期一早上我应该休息一下。我用一个将功能绑定到无效表单的示例更新了答案。这样,当表单被标记为无效时,您可以运行自己的脚本。我希望这更接近你的问题,不是问题。修改后的解决方案中的代码是否依赖于任何插件?对我来说,回调似乎永远不会被触发。再次感谢@威尔,对不起,我以前没看到你的问题。这确实依赖于jquery.validate插件,这是MVC2RTM客户端验证的默认插件。还有一个处理ajax提交的MicrosoftMvcJqueryValidation.js
。如果您使用它而不是jquery.validate,我可以跟踪该文件并查看一下。