如何清除jquery验证错误

Ben*_*ter 13 jquery-validate unobtrusive-validation

我正在hijaxing现有的表单和POST到服务器.jQuery validate执行大部分验证,但如果验证在服务器上失败,我们将错误作为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>
Run Code Online (Sandbox Code Playgroud)

问题是如果POST成功,我似乎无法清除验证错误.我已经尝试过呼叫,validator.resetForm()但这没有区别,showError()呼叫添加的错误消息仍然显示.

注意我也使用jQuery.validate.unobtrusive插件.

小智 33

你刚刚发布了这个,我不知道你是否成功解决了这个问题?我遇到了与jQuery validate和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();
Run Code Online (Sandbox Code Playgroud)

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

  • 您的要求可能略有不同,但我将其调整为简单的`$('#someFormId').validate().resetForm();` (2认同)