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

发布于 2024-11-29 12:31:05 字数 150 浏览 2 评论 0原文

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

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

I've attempted binding to the change event of all inputs in the form, and checked to see if there are any validation messages on the page. The problem is that validation seems to occur after the change event, so I am checking before the errors appear on the page. I'm looking for some way to run my script after the client-side validation takes place.

I'm using MVC 2 with DataAnnotation attributes on my VM.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哭泣的笑容 2024-12-06 12:31:05

这是我刚刚拼凑在一起的东西,它包装了原始的 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到父窗体,然后您可以使用 newhandler 函数包装该处理程序。

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

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

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

Here's something I just hacked together that wraps the original parseElement and invalidHandler functions, allowing you to add your own logic.

(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);

Notice, though, that this is an immediate function, not the jQuery function which is equivalent to document.onload.

This is replacing the $.validator.unobtrusive.parseElement with a new function that calls the original to ensure the validationInfo.options.invalidHandler is applied to the parent form, which then allows you to wrap that handler with the newhandler function.

Edit:
The above answer will only work for MVC3 and unobtrusive validation.

To perform some additional functionality with $.validator when the form is invalid...

$('form:first').bind("invalid-form.validate", function () { 
    alert("invalid!"); 
 });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文