【问题标题】:How can I disable a form's submit button if there are DataAnnotation validation errors?如果存在 DataAnnotation 验证错误,如何禁用表单的提交按钮?
【发布时间】:2011-08-15 14:41:51
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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);
    

    但请注意,这是一个即时函数,而不是等效于 document.onload 的 jQuery 函数。

    这是替换 $.validator.unobtrusive.parseElement 用一个新函数调用原始函数以确保将 validationInfo.options.invalidHandler 应用于父表单,然后允许您使用 @987654326 包装该处理程序@函数。

    编辑: 上述答案仅适用于 MVC3 和不显眼的验证。

    在表单无效时使用$.validator 执行一些附加功能...

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

    【讨论】:

    • 我注意到您的代码中的“不显眼”一词 - 我担心您的解决方案依赖于不显眼的 JS 支持,我知道这是 MVC 3 但不是 2 的一部分。是这样吗?
    • @Will:我很抱歉。我将您帖子的最后一行读为带有 DataAnnotations 属性的 MVC3(HTML5,不显眼)。我想我应该在星期一早上离开。我通过将功能绑定到无效表单的示例更新了答案。这样,当表单被标记为无效时,您可以运行自己的脚本。我希望这更接近您的问题。
    • 没问题。您修改后的解决方案中的代码是否依赖任何插件?回调似乎永远不会为我触发。再次感谢!
    • @Will,抱歉我之前没有看到你的问题。这确实依赖于 jquery.validate 插件,这是 MVC 2 RTM 客户端验证的默认插件。还有一个MicrosoftMvcJqueryValidation.js 处理ajax 提交。如果您使用它而不是 jquery.validate,我可以跟踪该文件并查看一下。
    猜你喜欢
    • 2020-04-14
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多