Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何禁用表单';如果存在DataAnnotation验证错误,请单击“提交”按钮?_Jquery_Forms_Validation_Asp.net Mvc 2_Data Annotations - Fatal编程技术网

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,我可以跟踪该文件并查看一下。