2012-08-05 21 views
5

मैं एक फार्म के लिए आयाम में प्रवेश करने का विकल्प होता है कि है:MVC 3 विनीत सत्यापन - सशर्त अक्षम/सक्षम सत्यापन

  • चौड़ाई & ऊंचाई
  • चौड़ाई
  • ऊंचाई

और मेरे पास दो कंटेनर divs हैं जिन्हें मैं छिपाता/दिखाता हूं कि तीन विकल्पों में से कौन सा विकल्प चुना गया है:

<div class="editor-field" id="width-container"> 
    @Html.EditorFor(model => model.Width) 
    @Html.ValidationMessageFor(model => model.Width) 
</div> 

<div class="editor-field" id="height-container"> 
    @Html.EditorFor(model => model.Height) 
    @Html.ValidationMessageFor(model => model.Height) 
</div> 

यदि ऊंचाई चुना जाता है, तो चौड़ाई को फॉर्म पर प्रदर्शित नहीं किया जाता है, मैं एक फैशन में चौड़ाई इनपुट फ़ील्ड पर अविभाज्य सत्यापन को कैसे अक्षम कर सकता हूं जो उपयोगकर्ता को अपने दिमाग को बदलने में आसानी से इसे फिर से स्थापित करने की अनुमति देगा डेटा को हटा रहा है- * विशेषताएं एक विकल्प नहीं है। मुझे इसे संभालने के लिए कस्टम एट्रिब्यूट क्लास बनाने में प्रसन्नता हो रही है लेकिन मैं इस काम को करने के लिए मानक jquery फ़ाइलों को हैक करना नहीं चाहता क्योंकि यह नए संस्करणों को ट्रैक के नीचे सिरदर्द को अद्यतन करता है। यदि सब कुछ विफल हो जाता है तो मैं फ़ील्ड में 0 का मान जोड़ने की अपनी सामान्य चाल का उपयोग करूंगा जब वे दिखाई नहीं दे रहे हैं और फिर दिखाए जाने पर इसे हटा दें।

संपादित करें:

कृपया ध्यान में रखना है कि जब चौड़ाई दिखाई नहीं देता है यह एक "छिपा" क्षेत्र से प्रति यह सिर्फ एक इनपुट टैग उपयोगकर्ता को दिखाई देने क्योंकि माता पिता div प्रदर्शन की एक शैली है नहीं है नहीं है: कोई भी

उत्तर

12

आप jQuery सत्यापनकर्ता कि छिपा तत्वों की अनदेखी करने के लिए अपने विनीत मान्यता प्रसंस्करण है सेट कर सकते हैं:

jQuery.validator.defaults.ignore = ":hidden"; 

// the line above is outside any $(document).ready(...) or similar 
$(document).ready(function(){ 
    ... 
}); 
... 
+0

मैंने इस के विभिन्न संस्करण को देखा है लेकिन उनमें से कोई भी काम नहीं कर रहा है - मैं इस निष्कर्ष पर आया कि समस्या यह है कि यह नियम काम नहीं करता है क्योंकि यह इनपुट टैग नहीं है जो छुपा हुआ है यह मूल div - या यह नियम "छिपा" टैग पर काम करने के लिए डिज़ाइन किया गया है जो "अदृश्य" इनपुट टैग नहीं है। बीटीडब्ल्यू मैंने आपके समाधान की कोशिश की है और यह काम नहीं करता है। – Rob

+0

'छुपा 'उन तत्वों के लिए निश्चित रूप से सच है जो छिपे हुए हैं क्योंकि उनके माता-पिता छिपे हुए हैं। जैसा कि आप इस पहेली में देख सकते हैं, मेरा समाधान मूलभूत मामले में अच्छी तरह से काम करता है: http://jsfiddle.net/7PmEz/5/। तो आइए यह पता लगाने की कोशिश करें कि आपके पास डेल्टा कहां है, वहां कुछ और याद आना चाहिए। कृपया jsfiddle में जेनरेट किया गया HTML डालें, फिर उसी जावास्क्रिप्ट का उपयोग करने का प्रयास करें जिसका उपयोग मैं इसे परीक्षण करने के लिए करता हूं। यदि यह काम करता है, तो कृपया संपूर्ण दृश्य कोड पोस्ट करें ताकि हम एक नज़र डालें। – Milimetric

+0

हमम निराशाजनक, मैं वास्तव में कोड को jsfiddle में नहीं डाल सकता क्योंकि यह एमएस एमवीसी 3 ढांचे का उपयोग करके उत्पन्न होता है - इसलिए यह वास्तव में वैध तुलना नहीं कर रहा है ... – Rob

1

तो ऐसा लगता है कि यह अपने प्रश्न का उत्तर (मैं गूगल पर फिर से शिकार हो गया था मुश्किल खोज करने के लिए है उन चीज़ों के लिए जो नहीं थे "छिपा" क्षेत्र) से संबंधित हैं:

https://stackoverflow.com/a/7673985/491950

उदा

$("#height-container input[type='text']").attr("disabled", "disabled"); 

आपके उत्तरों के लिए धन्यवाद।

+0

तो फिर इनपुट में टाइप कैसे करें? – stuartdotnet

+0

यह केवल तब अक्षम है जब उपयोगकर्ता को प्रदर्शित नहीं किया गया - मेरे उत्तर के ऊपर SO लिंक देखें – Rob