我正在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>
问题是如果POST成功,我似乎无法清除验证错误.我试过调用validator.resetForm(),但这没有区别,showError()调用添加的错误消息仍然显示.
注意我也使用jQuery.validate.unobtrusive插件.
解决方法
你刚刚发布了这个,我不知道你是否成功解决了这个问题?我遇到了与jQuery validate和jQuery.validate.unobtrusive插件相同的问题.
在检查了源代码和一些调试之后,我得出结论,问题来自于不显眼的插件处理错误消息的方式.它删除了jQuery.validate插件设置的errorClass,因此当表单重置时,jQuery validate无法找到要删除的错误标签.
// 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对象的变量.