2012-07-06 72 views
9

我haijaxing现有的表单和发布到服务器。 jQuery验证会执行大部分验证,但如果验证在服务器上失败,我们会以JSON的形式将错误返回给客户端。如何清除jquery验证错误

下面是做的代码:

<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插件。

+0

你可以请张贴的完整代码? – 2012-07-06 12:00:14

+0

没有太多它,但我已经发布了完整的脚本。 – 2012-07-06 12:54:46

+0

只是想知道,这条线对你有用吗? validator.showErrors(errors); – 2012-07-20 08:50:22

回答

29

你之前发布过这个,我不知道你是否设法解决了这个问题?我有与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对象。

+1

您的要求可能稍有不同,但我将其改编为简单的'$('#someFormId')。validate()。resetForm();' – AaronLS 2013-07-22 17:06:29

+0

@AaronLS。 jquery.validade.unobtrusive与否,我有同样的问题,你的代码解决了它。清洁和简单,谢谢。 – BernardA 2014-03-03 17:35:41

+0

我有同样的问题,你的解决方案工作正常,tks! – 2015-03-25 14:20:50

0

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

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在评论给出的答案,但没有得到解决,所以我只是不喜欢这样。

也许对某人有帮助。

1

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

0

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

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'); 
 
}