2012-07-06 14 views
9

Tôi đang chiếm đoạt một biểu mẫu hiện có và POSTING tới máy chủ. jQuery xác thực thực hiện hầu hết các xác nhận hợp lệ nhưng nếu việc xác nhận không thành công trên máy chủ, chúng tôi trả về lỗi cho máy khách dưới dạng JSON.Làm thế nào để xóa các lỗi xác thực jquery

Dưới đây là đoạn code nào đó:

<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> 

Vấn đề là tôi dường như không thể để xóa lỗi xác nhận nếu POST là thành công. Tôi đã thử gọi validator.resetForm() nhưng điều này không có sự khác biệt, các thông báo lỗi được thêm vào bởi cuộc gọi showError(), vẫn được hiển thị.

Lưu ý Tôi cũng đang sử dụng plugin jQuery.validate.unobtrusive.

+0

bạn có thể xin vui lòng gửi mã đầy đủ? –

+0

không có nhiều hơn nữa quá nhưng tôi đã đăng kịch bản đầy đủ anyway. –

+0

Chỉ cần tự hỏi, dòng này có phù hợp với bạn không? validator.showErrors (lỗi); –

Trả lời

29

Bạn đã đăng bài này một thời gian trước đây, tôi không biết liệu bạn có quản lý để giải quyết nó không? Tôi đã có cùng một vấn đề với jQuery xác nhận hợp lệ và plugin jQuery.validate.unobtrusive.

Sau khi kiểm tra mã nguồn và một số gỡ lỗi, tôi đi đến kết luận rằng vấn đề xuất phát từ cách plugin không phô trương xử lý các thông báo lỗi. Nó xóa errorClass rằng các bộ plugin jQuery.validate và vì vậy khi biểu mẫu được đặt lại, jQuery xác thực không thể tìm thấy các nhãn lỗi cần xóa.

tôi không muốn thay đổi mã của các plugin, vì vậy tôi đã có thể khắc phục điều này theo cách sau:

// 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(); 

lưu ý: Tôi sử dụng $ prefix cho các biến để biểu thị các biến có chứa Đối tượng jQuery.

+1

Yêu cầu của bạn có thể hơi khác một chút, nhưng tôi đã điều chỉnh nó đơn giản là '$ ('# someFormId'). Validate(). ResetForm();' – AaronLS

+0

@AaronLS. jquery.validade.unobtrusive hay không, tôi đã có cùng một vấn đề và mã của bạn giải quyết nó. Sạch sẽ và đơn giản, cảm ơn. – BernardA

+0

Tôi đã có cùng một vấn đề và giải pháp của bạn hoạt động tốt, tks! –

0

Có thể là tôi sai để xóa lỗi như thế này:

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

Tôi cố gắng trả lời được đưa ra trong những nhận xét của AaronLS nhưng không có giải pháp vì vậy tôi chỉ làm điều đó như thế này.

Có thể hữu ích cho ai đó.

1

$ ("# hình thức"). Find ('khoảng trường xác nhận lỗi '). Html ('')

0

Dưới đây là đoạn code tôi đã kết thúc sử dụng để xóa/thiết lập lại tất cả các lỗi. Có thể có một số dư thừa trong đó, nhưng nó làm việc cho tôi.

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