2010-02-24 13 views
7

मैंने jQuery सत्यापन प्लगइन का उपयोग करके एक फॉर्म रखा है, और सभी इनपुट वर्किंग सत्यापन और त्रुटि संदेशों के साथ ठीक हैं - चेकबॉक्स को छोड़कर। मेरे पास दो चेकबॉक्स समस्याएं हैं IjQuery सत्यापन प्लगइन: चेकबॉक्स समूह और त्रुटि संदेश समस्याएं

पहला यह है कि प्रमाणीकरण प्लगइन एपीआई समूहीकृत संदर्भों में चेकबॉक्स को संभाल नहीं पाता है (मैं समूहबद्ध करने के लिए फ़ील्ड का उपयोग कर रहा हूं)। कस्टम विधि और कक्षा का उपयोग करके अधिक सामान्य मामले के लिए रेबेका मर्फी द्वारा a post के संदर्भ में इस मुद्दे पर कई दृष्टिकोण पाए गए। इस स्थिति के लिए अनुकूल है कि:

jQuery.validator.addMethod('required_group', function(val, el) { 
     var fieldParent = $(el).closest('fieldset'); 
     return fieldParent.find('.required_group:checked').length; 
}); 

jQuery.validator.addClassRules('required_group', { 
     'required_group': true 
}); 

jQuery.validator.messages.required_group = 'Please check at least one box.'; 

काम करता है इस तरह की, लेकिन हर चेकबॉक्स पर त्रुटि संदेश पैदा करता है, और के रूप में प्रत्येक बॉक्स क्लिक किया जाता है केवल उन्हें निकालता है। यह उपयोगकर्ता के लिए स्वीकार्य स्थिति नहीं है, जो झूठी सकारात्मक पर क्लिक करके केवल उनसे छुटकारा पा सकता है। आदर्श रूप से, मुझे लगता है कि उनके संदेशों को प्रदर्शित करने से पहले अतिरिक्त संदेशों को रोकने या समाप्त करने के लिए कुछ आवश्यक है और पैरेंट फ़ील्ड में एक त्रुटि संदेश प्रदर्शित करने के लिए त्रुटि प्लेसमेंट का उपयोग करें, जिसे तब किसी भी चेकबॉक्स पर क्लिक के साथ हटा दिया जाएगा। कम आदर्श, शायद वे सभी प्रदर्शित होंगे लेकिन एक ईवेंट हैंडलर एक क्लिक के साथ अनावश्यक संदेशों का पूरा सेट बंद कर सकता है, जो this approach tvanfosson द्वारा प्रदान किया जाता है। (एक और अनुकूलित दृष्टिकोण here, लेकिन मैं इसे काम नहीं कर सका।) मुझे लगता है कि मुझे यह भी ध्यान रखना चाहिए कि इस फ़ॉर्म को चेकबॉक्स के अलग-अलग नाम होने की आवश्यकता है।

मेरी दूसरी समस्या के रूप में चेक बॉक्स के साथ fieldsets में से एक भी बाहरी चेक बॉक्स में से एक के तहत चेक बॉक्स के एक नेस्ट fieldset शामिल है। तो प्रथम स्तर की एक-बॉक्स-चेक की आवश्यकता के अतिरिक्त, यदि दूसरे स्तर के चेकबॉक्स वाले विशेष चेकबॉक्स की जांच की जाती है, तो कम से कम दूसरे स्तर के बॉक्स में से एक को चेक किया जाना चाहिए। सही दृष्टिकोण के बारे में निश्चित नहीं है; मैं अनुमान लगा रहा हूं कि क्या होने की आवश्यकता है (उपर्युक्त योजना के बाद) यह है कि ट्रिगर चेकबॉक्स उप-फ़ील्ड में सभी चेकबॉक्स में 'आवश्यक_ग्रुप' वर्ग को जोड़ने/निकालने के लिए टॉगल क्लास का उपयोग करेगा, जो तब (उम्मीद है) माता-पिता के समान व्यवहार करेगा फ़ील्ड:

$("#triggerCheckbox").click(function() { 
    $(this).find(":checkbox").toggleClass("required_group"); 
}); 

कोई सुझाव या विचार आपका स्वागत है। मैं इस पर अपने सीमित jQuery कौशल से परे हूं और यह सुनकर खुशी होगी कि मुझे ऐसा करने के लिए सरल, सुरुचिपूर्ण और/या स्पष्ट तरीके याद आए!

+0

क्या आपको कोई समाधान मिला? मुझे आपके चेकबॉक्स के बजाय फ़ाइल अपलोड इनपुट के साथ एक ही समस्या का सामना करना पड़ रहा है। चीयर्स। – Nicolas

+0

अपने प्रश्न पर ठोकर खाई। क्या यह आपकी मदद करेगा? http://stackoverflow.com/questions/1300994/jquery-validate-require-at-least-one-field-in-a-group-to-be-filled –

उत्तर

2

मैंने पहले इसी तरह की समस्या का सामना किया है, हालांकि मेरे विशिष्ट मामले में मुझे लगता है कि मेरे पास यह आपके लिए आसान था - मेरे पास चेकबॉक्स के समूह थे, लेकिन फॉर्म में कुछ भी मान्य करने की आवश्यकता नहीं थी।

//for each fieldset, attach a new rule to the first checkbox 
$('fieldset input[type="checkbox"]:first').each(function(i,v){ 
    $(v).rules('add', { 
     required: "fieldset input[type="checkbox"]:unchecked" 
    }); 
}); 

क्रम कुछ सत्यापन त्रुटियों के साथ समझदार करने के लिए, अपने खुद के showErrors समारोह को लागू:

यहाँ सामान्य विचार है, जो "चेकबॉक्स प्रति एक त्रुटि" की अपनी समस्या को हल कर सकते हैं है। यहां बताया गया है कि मेरे मामले की सादगी शायद आपकी मदद नहीं करेगी - मुझे इस बारे में चिंता करने की ज़रूरत नहीं थी कि त्रुटियां चेकबॉक्स समूह में थी या नहीं, मेरे फॉर्म में अगर त्रुटियां थीं, तो यह वही होगी समस्या - कम से कम एक चेकबॉक्स प्रति फ़ील्ड की जांच नहीं की गई थी। आपके लिए, मुझे लगता है कि त्रुटि मैक और त्रुटि सूची के साथ क्या करना है यह देखने के लिए आपको Validate प्लगइन के डिफ़ॉल्टShowErrors फ़ंक्शन (स्रोत में) में खोदना होगा।

$('#myForm').validate({ 
    ... 
    showErrors: function(map,list){ 
     if (this.numberofInvalids()){ 
      $('#form_errors').html('You much choose at least one Checkbox per group'); 
     } else { 
      this.defaultShowErrors(); 
     } 
    } 
}); 

अपने प्रश्न के 2 भाग के लिए, मुझे लगता है एक 'निर्भर करता है' नियम आप जो खोज रहे हैं है। इसलिए वास्तव में कक्षाओं को जोड़ने की कोई ज़रूरत नहीं है, बस उप-समूह के लिए नियम होना आवश्यक है चेक-इन चेकबॉक्स पर निर्भर करता है (नियम विधि दस्तावेज़ों में लगभग सही उदाहरण देखें)।

+0

हाँ, मैंने विशेष त्रुटि प्लेसमेंट बनाने में अपनी समस्या हल की है और मैंने उपयोगकर्ता को पहले 2 फ़ील्ड भरने के लिए मजबूर किया था। यदि वह नहीं करता है, तो मैं 2 मामलों के लिए अपनी त्रुटि प्लेसमेंट का उपयोग करता हूं (लेकिन आतंकवाद मेरे फ़ाइल अपलोड इनपुट के लिए एक और मुद्दा था)। चीयर्स। – Nicolas

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