2012-07-06 33 views
9

Varolan bir formu yazmak ve sunucuya POST yapmaktan vazgeçiyorum. jQuery validate, doğrulamanın çoğunu yapar, ancak sunucuda doğrulama başarısız olursa, hataları müşteriye JSON olarak döndürür.JQuery doğrulama hatalarını nasıl temizlerim

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

Sorun POST başarılı olursa doğrulama hatalarını temizlemek gibi olamaz geçerli: Aşağıda

bunu yapmaz koddur. validator.resetForm() numaralı telefonu aramayı denedim, ancak bu hiçbir fark yaratmıyor, showError() çağrısı tarafından eklenen hata mesajları hala görüntüleniyor.

Not Ayrıca jQuery.validate.unobtrusive eklentisini de kullanıyorum.

+0

tam kod sonrası misiniz? –

+0

çok fazla değil ama yine de tam senaryoyu yayınladım. –

+0

Sadece bu hat sizin için işe yarıyor mu? validator.showErrors (errors); –

cevap

29

Bunu bir süre önce gönderdiniz, bunu çözmeyi başardı mı bilmiyorum? JQuery validate ve jQuery.validate.unobtrusive eklentisiyle aynı sorunu yaşadım.

Kaynak kodunu ve bazı hata ayıklamalarını inceledikten sonra, sorunun, dikkat çekici eklentinin hata iletilerini işleme biçiminden kaynaklandığı sonucuna vardım. jQuery.validate eklenti kümelerinin errorClass kaldırır ve böylece form sıfırlandığında jQuery doğrulaması kaldırılacak hata etiketlerini bulamaz.

Ben eklentileri kodunu değiştirmek istemiyordu, bu yüzden şu şekilde bunun üstesinden başardı:

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

not: Ben ihtiva değişkenleri belirtmek için değişkenler için $ öneki kullanmak jQuery nesneleri.

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

Ben AaronLS tarafından yorumda verilen cevabı çalıştı ama çözüm yüzden sadece böyle yapmak var değil:

+1

Gereksinimleriniz muhtemelen biraz farklıydı, ancak bunu sadece $ ('# someFormId') olarak ayarlıyorum validate(). ResetForm(); ' – AaronLS

+0

@AaronLS. jquery.validade.unobtrusive ya da değil, aynı sorun vardı ve kod çözüldü. Temiz ve basit, teşekkürler. – BernardA

+0

Aynı problemi yaşadım ve çözümün işe yaradı, tks! –

0

böyle hataları temizlemek için yanıldığımı olabilir.

Belki birilerine yardımcı olabilir.

1

$ ("# form"). ('Saha doğrulama hatası yayılma ') bulabilirsiniz. Html ('')

0

Burada tüm hataları sıfırlamak/temizlemek için kullanarak sona erdi kod. Orada bir miktar fazlalık var, ama benim için çalışıyor.

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

İlgili konular