2011-09-21 17 views
8

एक .NET एमवीसी प्रोजेक्ट के भीतर jQuery अविभाज्य सत्यापन का उपयोग करना और ऐसा लगता है कि यह ठीक काम कर रहा है। जब मैं फ़ील्ड सही ढंग से मान्य करता हूं (क्लाइंट-साइड और/या रिमोट) अब मैं एक हरे रंग की चेकमार्क दिखाने की कोशिश कर रहा हूं।.NET एमवीसी 3 में jQuery अविभाज्य सत्यापन - सफलतापूर्वक चेकमार्क

<div class="clearfix"> 
     @Html.LabelFor(model => model.Address1, "Street") 
     <div class="input"> 
      @Html.TextBoxFor(model => model.Address1, new { @class = "xlarge", @maxlength = "100", @placeholder = "e.g. 123 Main St" }) 
      <span class="help-message"> 
       @Html.ValidationMessageFor(model => model.Address1) 
       <span class="isaok">Looks great.</span> 
      </span> 
      <span class="help-block">Enter the street.</span> 
     </div> 
    </div> 

मुझे क्या करना चाहते हैं "span.isaok" जो बारी में एक पृष्ठभूमि छवि के लिए एक सही का निशान है करने के लिए एक वर्ग 'सक्रिय' जोड़ने है:

यहां एक नमूना क्षेत्र घोषणा है।

मैं का उपयोग कर की कोशिश की मुख्य आकर्षण/unhighlight:

$.validator.setDefaults({ 
onkeyup: false, 

highlight: function (element, errorClass, validClass) { 
    $(element).addClass(errorClass).removeClass(validClass); 
    $(element.form).find("label[for=" + element.id + "]").addClass("error"); 
    $(element).parent().find("span.isaok").removeClass("active"); 
}, 
unhighlight: function (element, errorClass, validClass) { 
    $(element).removeClass(errorClass).addClass(validClass); 
    $(element.form).find("label[for=" + element.id + "]").removeClass("error"); 
    if ($(element).val().length > 0) { 
     $(element).parent().find("span.isaok").addClass("active"); 
    } 
} 

});

लेकिन यह खाली होने पर भी सभी क्षेत्रों के लिए एक हरा चेकमार्क दिखाता है! (इसलिए स्पष्ट रूप से गलत)

मैंने फिर 'सफलता' विकल्प का उपयोग करने की कोशिश की लेकिन ऐसा कभी नहीं किया जाता है।

मुझे क्या याद आ रही है?

संपादित करें: तो मैं this blog post पाया और अर्थात्

$(function() { 
    var settings = $.data($('form')[0], 'validator').settings; 
    settings.onkeyup = false; 
    settings.onfocusout = function (element) { $(element).valid(); }; 

    var oldErrorFunction = settings.errorPlacement; 
    var oldSuccessFunction = settings.success; 
    settings.errorPlacement = function (error, inputElement) { 
     inputElement.parent().find("span.isaok").removeClass("active"); 
     oldErrorFunction(error, inputElement); 
    }; 
    settings.success = function (label) { 
     var elementId = '#' + label.attr("for"); 
     $(elementId).parent().find("span.isaok").addClass("active"); 
     oldSuccessFunction(label); 
    }; 
}); 

सफलता समारोह का दोहन करने में सक्षम था, लेकिन अब यह दोनों त्रुटि संदेश और वैध निशान से पता चलता है, तो प्रपत्र मान्य नहीं है .. ।

On submit

और बाद जैसे ही मैं पेज पर कहीं भी क्लिक के रूप में गायब हो जाता है।

On clicking on the page

उत्तर

1

मामले में किसी भी एक इसी तरह की एक समस्या है, मैं अंत में jquery.validate.unobtrusive.js को अनइंस्टॉल न्यूनतम किया गया संस्करण का उपयोग कर और onError और onSuccess तरीकों के लिए अपने js जोड़कर इस काम कर गया। मौजूदा कोड इसके रूप में छोड़ा गया था। तैनाती के दौरान पुनः-संशोधित संस्करण का उपयोग करें।

धन्यवाद।

+0

+1 पुरानी पोस्ट लेकिन यह अभी भी मामला प्रतीत होता है। मैं मिनट और इसके काम पर स्विच किया। कोई सुराग क्यों नहीं। – Botonomous

2

यह jquery.validate.unobtrusive सेटिंग्स $.validator.setDefault में बाद में जोड़ा गया के साथ हस्तक्षेप के साथ कोई समस्या प्रतीत होता है। चाल कस्टम सेटिंग्स के बाद अविभाज्य स्क्रिप्ट लोड करने के लिए है। here देखें और इसे here को ठीक करने के लिए वोट दें।

0

यह आपके प्रश्न का सीधा जवाब नहीं है। मैं इसके लिए एक वैकल्पिक दृष्टिकोण प्रदान करने जा रहा हूं: TwitterBootstrapMVC

इस पुस्तकालय तुम सब होगा प्रत्येक इनपुट के लिए लिखने के साथ है:

@Html.Bootstrap().ControlGroup().TextBoxFor(m => m.Address1) 

और बस हो गया। आपके पास लेबल, इनपुट और सत्यापन संदेश होगा - जावास्क्रिप्ट के बिना, सभी की देखभाल की गई। यह आपके लिए उचित एचटीएमएल मार्क उत्पन्न करता है। आपको बस यह सुनिश्चित करने की ज़रूरत है कि .field-validation-error, .field-validation-valid जैसे वर्गों के लिए आपके पास उचित मानक सीएसएस है ...

संबंधित मुद्दे