如何清除jQuery验证错误(How to clear jquery validate errors

2019-06-26 02:26发布

我hijaxing现有形式发送到服务器。 jQuery验证完成大部分的验证,但如果验证服务器上失败,我们返回的错误到客户端为JSON。

下面是做的代码:

<script type="text/javascript">

    $(function () {

        $("form").submit(function (e) {
            var $form = $(this);
            var validator = $form.data("validator");

            if (!validator || !$form.valid())
                return;

            e.preventDefault();

            $.ajax({
                url: "@Url.Action("index")",
                type: "POST",
                data: $form.serialize(),
                statusCode: {
                    400: function(xhr, status, err) {                           
                        var errors = $.parseJSON(err);
                        validator.showErrors(errors);
                    }
                },
                success: function() {
                    // clear errors
                    // validator.resetForm();
                    // just reload the page for now
                    location.reload(true);
                }
            });
        });

    });

</script>

问题是,我似乎无法清除验证错误如果POST成功。 我已经打过电话validator.resetForm()但这并没有区别,所添加的错误信息showError()调用,仍然显示。

请注意我还使用了jQuery.validate.unobtrusive插件。

Answer 1:

您刚才发布的这个,我不知道,如果你设法解决它? 我与jQuery验证和jQuery.validate.unobtrusive插件同样的问题。

检查源代码和一些调试后,我来到了这个问题来自于不显眼的插件处理错误消息的方式结束。 它消除了errorClassjQuery.validate插件集,所以当表单被重置,jQuery验证找不到错误的标签去除。

我不想修改插件的代码,所以我能够以下列方式解决此问题:

// get the form inside we are working - change selector to your form as needed
var $form = $("form");

// get validator object
var $validator = $form.validate();

// get errors that were created using jQuery.validate.unobtrusive
var $errors = $form.find(".field-validation-error span");

// trick unobtrusive to think the elements were succesfully validated
// this removes the validation messages
$errors.each(function(){ $validator.settings.success($(this)); })

// clear errors from validation
$validator.resetForm();

注意:我使用的变量$前缀表示包含的jQuery对象的变量。



Answer 2:

可能是我错了,清除这样的错误:

function clearError(form) {
    $(form + ' .validation-summary-errors').each(function () {
        $(this).html("<ul><li style='display:none'></li></ul>");
    })
    $(form + ' .validation-summary-errors').addClass('validation-summary-valid');
    $(form + ' .validation-summary-errors').removeClass('validation-summary-errors');
    $(form).removeData("validator");
    $(form).removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse($(form));
};

我试图通过AaronLS评论给出的答案,但没有得到解决,所以我只是不喜欢这样。

也许有帮助的人。



Answer 3:

$( “#形式”)。找到( '现场验证,误差范围 ')。HTML('')



Answer 4:

这是我结束了使用清除/重置所有错误代码。 这是可能有一些冗余在那里,但它为我工作。

 function removeValidationErrors(frmId) { var myform = $('#' + frmId); myform.get(0).reset(); var myValidator = myform.validate(); $(myform).removeData('validator'); $(myform).removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse(myform); myValidator.resetForm(); $('#' + frmId + ' input, select').removeClass('input-validation-error'); } 



Answer 5:

究其原因这仍是一个问题(甚至6年)是jQuery验证没有当你的表格是有效的事件处理程序; 仅当它是无效的。

不显眼的验证水龙头到无效的处理程序,以你的错误添加到您的验证摘要元素。 (具体而言,任何元素data-valmsg-summary=true )。但是,因为没有有效的处理程序,有没有办法不显眼验证知道他们什么时候可以被清除。

然而,jQuery验证并允许你提供自己的showErrors方法,这是每一个验证检查后调用,其结果是有效还是无效。 因此,您可以编写自定义函数,将清除这些验证摘要框,如果你的表格是有效的。

下面是将全局应用的样本。 (您可以通过使用其应用到你的校验具体情况settings ,但因为我总是想这个功能,我只是把它的defaults的对象。)

$.validator.defaults.showErrors = function () {
    if (!this.errorList.length) {
        var container = $(this.currentForm).find("[data-valmsg-summary=true]");
        container.find("ul").empty();
        container.addClass("validation-summary-valid").removeClass("validation-summary-errors");
    }

    // Call jQuery Validation's default showErrors method.
    this.defaultShowErrors();
};

这也具有清热验证摘要盒子的那一刻你的表格是有效的,而不必等待用户请求表单提交的好处。



文章来源: How to clear jquery validate errors