【问题标题】:Cannot disable jQuery Validation无法禁用 jQuery 验证
【发布时间】:2015-01-30 10:30:08
【问题描述】:

我无法禁用表单的验证。我尝试了其他问题和论坛的许多解决方案,例如:

1. $("#PatientForm").validate({ ignore: "*" });
2. $("#submitButton").addClass("cancel");
3. $('#PatientForm').validate().settings.ignore = ["*"];
4. $("#PatientForm").validate({ onsubmit: false });
5. $('#PatientForm').validate({ submitHandler: null });

而且 jQuery Validate 仍然想要验证所有字段。我正在尝试禁用复选框更改。复选框更改处理程序受到限制,因为我已经使用 FireBug 对其进行了检查,并且所有调用(1. 到 5.)都在没有任何错误消息的情况下执行。

这是我的验证配置:

    // JQUERY VALIDATE - TURN ON VALIDATION ON SUBMIT + VALIDATE PESEL BEFORE SAVE
    $('#PatientForm').validate({
        submitHandler: function(form) {
            var pesel = $('#Pesel').val();
            var isValid = $(form).valid();
            $.ajax({
                type: 'GET',
                url: '@Url.Action("IsPeselExisting", "Admin")',
                data: { peselPar: pesel },
                success: function (msg) {
                    if (msg["exists"] == 'true')
                    {
                        if (isValid == true)
                        {
                            if (confirm("Wprowadzony pesel już istnieje! Czy na pewno chcesz dodać użytkownika o kolidującym peselu"))
                            {
                                form.submit();
                            }
                        }
                    }
                    else
                    {
                        if (isValid == true)
                        {
                            form.submit();
                        }
                    }
                }
            });
        }
    });

    // JQUERY VALIDATE - GENERAL SETTINGS
    $('#PatientForm').validate().settings.ignore = [];
    $("#PatientForm").validate({ ignore: ".ignored" });

    // JQUERY VALIDATE - GENERAL SETTINGS
    $.validator.addMethod("regex", function (value, element, regexp) {
        return regexp.test(value);
    }, "");

提前谢谢...

【问题讨论】:

  • 这里有一些可能有用的提示:stackoverflow.com/questions/363268/…
  • 上述问题的另一个解决方案帮助了我。禁用表单:jQuery('#form').validate().currentForm = ''; 再次启用表单:jQuery('#form').validate().currentForm = jQuery('#form')[0]; 为什么 jQuery 验证如此不可预测? :(
  • 仍然显示验证消息(必需,我的自定义正则表达式)但允许提交...这个 Validate 库有什么问题,它是如此不可预测?
  • 它没有任何问题,使用得当非常有预见性。

标签: jquery asp.net-mvc-4 jquery-validate


【解决方案1】:

一旦在表单上初始化了 jQuery Validate 插件,就没有已知的方法可以禁用它...期间。

您的尝试失败的原因是您不能在同一个表单上多次调用.validate() 方法。初始化后,任何对.validate() 的后续调用都将被忽略。

$('#myform').validate({ /* your settings */ });  // <- initialize plugin

// later ...

$('#myform').validate({ /* new settings */ }); // <- ALWAYS IGNORED!!

但是,要不经验证提交表单数据,请将class="cancel" 放在type="submit" inputbutton 元素上。这样做的好处是,虽然绕过了验证,但插件没有,所以如果你使用submitHandler,它仍然会被触发。

<input type="submit" class="cancel" value="SAVE" />

<button type="submit" class="cancel">SAVE</button>

工作演示:http://jsfiddle.net/yan98120/


其他问题

  1. 您不能在ajax() 函数中的任何地方执行form.submit();将submit() 放在ajax() success 回调中只是无稽之谈。 .ajax() 中的 success 回调意味着表单已经通过 Ajax 成功提交。因此,当 Ajax 已经完成发送表单时,success 中的 .submit() 完全没有意义。

  2. 您的“设置”部分也毫无意义。首先,使用.settings.ignoreignore 设置为[],然后立即在.validate() 方法中将ignore 设置为".ignored"。为您的设置选择一种方法和一组参数并坚持下去。

正如我试图解释您的其他问题之一,please see the SO Tag Wiki page for a basic demo and hints on proper usage

【讨论】:

  • 那么有没有办法在某些字段上保留“正则表达式”验证并在所有字段上关闭“必需”?
  • 我正在使用您首先提到的“设置”部分来禁用隐藏文件验证,然后启用“.ignored”验证。
  • @XaweryWiśniowiecki,您可以使用.rules('add').rules('remove') 方法动态更改规则。见:stackoverflow.com/a/15836507/594235
  • 我认为您的第 1 点不正确。(其他问题)。这个.ajax() 被调用只是为了检查IsPeselExisting(Pesel 的数字对于波兰的任何人都不同。我不能通过验证来做到这一点,但只能询问 DB)然后如果成功(Pesel 与任何 Pesel 不同)在 DB 中)它正在提交表单。我认为唯一错误的说法是var isValid = $(form).valid();。因为进入 submitHandler 意味着表单已经有效。我现在是吗?
  • @XaweryWiśniowiecki,是的,进入submitHandler 意味着表格已经有效。该规则的例外情况是,当您在提交按钮上使用class="cancel" 时,您无需验证即可进入submitHandler。但是,如果您只需要检查数据库以查看是否已存在某些内容,则应使用remote 规则/方法。
猜你喜欢
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2010-12-11
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多