2013-10-12 9 views
8

मैं वर्तमान में bassistance jquery validation या jqueryvalidation प्लगइन (वे इसका नाम बदलकर) का उपयोग कर रहा हूँ और मैं यह इतना कुछ ऐसे स्वरूप मान्य है आवश्यक जोड़ने या कोई अतिरिक्त फ़ील्ड ड्रॉपडाउनलिस्ट नहीं है और उस ड्रॉपडाउनलिस्ट के आधार पर एक और टेक्स्ट इनपुट। तो यह है की तरह:jQuery सत्यापन आदानों गतिशील

if($('#txtAmount').val() >= 10000){ 
    //add ddlReason required 
} 

if($('#ddlReason').val() == 'o'){ 
    //add txtReason required 
} 

मैं अन्य क्षेत्रों की तरह सीएसएस वर्ग 'आवश्यक' जोड़ने की कोशिश की है, लेकिन मैं इसे ले करता है, तो वे नियमों के भीतर नहीं हैं तो यह काम नहीं करता? मैंने इस तरह के नियम जोड़ने की कोशिश की है:

$("#ddlReason").rules("add", { 
     required: true}); 

और यह भी काम नहीं करता है। कोई सुझाव?

संपादित करें: यहां उपयोग किए जा रहे jquery सत्यापन के लिए link है। अगर मैं नियमों का इस्तेमाल किया यह बाहर इस त्रुटि देता है:

Uncaught TypeError: Cannot read property 'settings' of undefined 

लाइन 124 पर:

var settings = $.data(element.form, 'validator').settings; 

और सुझावों मैं अन्य स्थानों में देखा है का उपयोग करते हुए मैं इस राशि है जो त्रुटि का कारण बनता है किया है :

var defaultrules = { 
    txtAmount: { 
     required: true, 
     digits: true 
    } 
} 

if($.fn.validate) { 
    $("#frmNewOrder").validate(); 
    addRules(defaultrules); 
} 

संपादित करें 2: यहां HTML मार्कअप है, उम्मीद है कि यह मदद करता है।

<form id="frmNewOrder" name="frmNewOrder" action="" method="post"> 
<label>Amount</label> 
<input type="text" name="txtAmount" id="txtAmount" class="required" /> 
<button id="calculate" type="button">Calculate</button> 
<div id="dvreason" style="display:none;"> 
    <select id="ddlReason" name="ddlReason"> 
     <option></option> 
     <option value="i">Option 1</option> 
     <option value="o">Other</option> 
    </select> 
    <div id="dvother" style="display:none"> 
     <label>Other reason</label> 
     <input type="text" name="txtOther" id="txtOther" /> 
    </div> 
</div> 
<input type="submit" name="send" id="send" value="Send" /> 
</form> 
+0

आप के साथ कुछ HTML पोस्ट कर सकते हैं संदर्भ में जेएस? हो सकता है कि इसे एक [jsfiddle] (http://jsfiddle.net) में रखें –

+0

मुझे jsfiddle lol पर मान्य जोड़ने में कठिनाई हो रही है यदि मैं इसे समझ सकता हूं तो मैं इसे – Andres

+0

पोस्ट करूंगा, नहीं, आप निश्चित रूप से 'कक्षा का उपयोग कर सकते हैं = 'validate() 'में' नियमों' घोषणा के बजाय '" आवश्यक "' या '। नियम ('जोड़ें')'। आपके कोड के साथ कुछ और गलत होना चाहिए। एक कामकाजी डेमो बनाने के लिए पर्याप्त कोड दिखाएं। सभी प्रासंगिक jQuery और एचटीएमएल। – Sparky

उत्तर

5

इसके साथ वही समस्या का सामना करना पड़ा,

सच है कि आप क्या ध्यान देंगे में

है कि सत्यापनकर्ता लाइन 124 पर अपरिभाषित है, यानी कोई सत्यापनकर्ता विधि से संबद्ध उदाहरण है

अगर आप की जाँच सत्यापित करें विधि आप देखते हैं कि अगर सत्यापनकर्ता अपरिभाषित है यह एक नया एक

var validator = $.data(this[0], 'validator'); 
     if (validator) { 
      return validator; 
     } 

     // Add novalidate tag if HTML5. 
     this.attr('novalidate', 'novalidate'); 

      //HERE it is creating a new one using the constructor 
     validator = new $.validator(options, this[0]); 
     $.data(this[0], 'validator', validator); 

पैदा करेगा जाहिर rules विधि है कि सत्यापनकर्ता मान लिया गया है फॉर्म ऑब्जेक्ट में पहले से ही है, इसलिए मेरी समझ से, और validate सत्यापनकर्ता उदाहरण देता है, तो आप validate पर कॉल कर सकते हैं और फिर अपने अतिरिक्त नियम लौटाए गए वैधकर्ता settings.rules ऑब्जेक्ट में जोड़ सकते हैं और फिर से चला सकते हैं जो बहुत व्यावहारिक नहीं है।

अन्य समाधान बस validate

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

कोड उदाहरण:

var customRule = {number: true}; 

//suppose populateValidateRules() fills your initial rules, which is my case at least 
var validationRules = populateValidateRules(); 

validationRules["rules"].fieldToBeDynamicallyModifiedForValidation= customRule; 

$(formId).validate(validationRules); 

आशा इस मदद करता है

10

मैं भी एक ही त्रुटि संदेश मिल गया और महसूस किया कि मैं फार्म पर validate() पहले बुलाना चाहिए इससे पहले कि मैं अलग-अलग इनपुट क्षेत्रों पर rules() फोन चाहते हैं। यह व्यवहार documented है।

$('#form').validate({ 
    rules: { 
    email: { 
     email: true 
    } 
    } 
}); 

$('#email').rules('add', { 
    required: true 
}); 

इस ओपी के समस्या का जवाब नहीं हो सकता है, लेकिन मैं यह जो jquery validation Cannot read property settings of undefined खोज की है और इस पृष्ठ पर क्लिक किया किसी को मदद करने के लिए पोस्ट कर रहा हूँ।

@nsawaya द्वारा दिए गए संकेत के लिए धन्यवाद!

+0

आपको बहुत बहुत धन्यवाद, यह एक बड़ी मदद थी! – Ryanman

0

उनकी एक समस्या है, जबकि आईडी का उपयोग कर यदि आप ऐसा उदाहरण के लिए इस तरह विशेषता data="ddlReason" जोड़ सकते हैं और यह विशेषता चयनकर्ता उपयोग करती हैं इसलिए काम कर रहा है गतिशील जोड़ने तत्व हो रही:

$("input[data='ddlReason']").rules("add", { 
     required: true 
}); 
संबंधित मुद्दे