2012-07-06 13 views
9

मैं मौजूदा फॉर्म को हाइजैक्स कर रहा हूं और सर्वर पर पोस्ट कर रहा हूं। 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> 

समस्या है मैं सत्यापन त्रुटियों स्पष्ट करने के लिए करता है, तो पोस्ट सफल हुआ प्रतीत नहीं कर सकते हैं:

नीचे कोड है कि करता है। मैंने validator.resetForm() पर कॉल करने का प्रयास किया है लेकिन इससे कोई फर्क नहीं पड़ता है, showError() कॉल द्वारा जोड़े गए त्रुटि संदेश अभी भी प्रदर्शित होते हैं।

नोट मैं भी jQuery.validate.unobtrusive प्लगइन का उपयोग कर रहा हूँ।

+0

आप पूर्ण कोड पोस्ट करें कर सकते हैं? –

+0

इसमें और भी कुछ नहीं है लेकिन मैंने पूरी स्क्रिप्ट को वैसे भी पोस्ट किया है। –

+0

बस आश्चर्य है, क्या यह लाइन आपके लिए काम करती है? validator.showErrors (त्रुटियां); –

उत्तर

29

आपने इसे कुछ समय पहले पोस्ट किया था, मुझे नहीं पता कि क्या आप इसे हल करने में कामयाब रहे हैं? मुझे jQuery सत्यापन और jQuery.validate.unobtrusive प्लगइन के साथ एक ही समस्या थी।

स्रोत कोड और कुछ डीबगिंग की जांच करने के बाद, मैं इस निष्कर्ष पर पहुंचा कि समस्या यह है कि समस्या अविश्वसनीय प्लगइन त्रुटि संदेशों को संभालती है। यह errorClass को हटा देता है कि jQuery.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 ') के रूप में अनुकूलित किया। मान्य()। ResetForm(); ' – AaronLS

+0

@AaronLS। jquery.validade.unobtrusive या नहीं, मुझे एक ही समस्या थी और आपके कोड ने इसे हल किया। स्वच्छ और सरल, धन्यवाद। – BernardA

+0

मुझे एक ही समस्या थी और आपका समाधान ठीक काम करता था, tks! –

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