无法禁用jQuery验证

时间:2015-01-30 10:30:09

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

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

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);
    }, "");

提前致谢...

1 个答案:

答案 0 :(得分:2)

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

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

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

// later ...

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

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

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

OR

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

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


其他问题

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

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

  3. 我试图解释你的其他一个问题,please see the SO Tag Wiki page for a basic demo and hints on proper usage