jQuery

2008-10-05 16 views
7

पिछली बार I asked about the reverse process के साथ एक सहयोगी सरणी से डेटा के साथ एक फ़ॉर्म पॉप्युलेट करें, और कुछ बहुत ही कुशल उत्तर प्राप्त हुए। मैं यहां कोड की कम से कम लाइनों का लक्ष्य रख रहा हूं। मेरे पास फ़ील्ड का एक रूप है और {fieldname: data} प्रारूप में एक सहयोगी सरणी है, मैं इसके साथ एक संबंधित फॉर्म को पॉप्युलेट करना चाहता हूं।jQuery

उत्तर

7

जब मैं एक के लिए ऐसा किया प्रोजेक्ट, मैंने पाया कि चुनिंदा फ़ील्ड, रेडियो बटन और चेकबॉक्स के मूल्य को और जटिल कोड की आवश्यकता है,


jQuery.each(data, function (name,value) { 
    jQuery("input[name='"+name+"'],select[name='"+name+"']").each(function() { 
    switch (this.nodeName.toLowerCase()) { 
     case "input": 
      switch (this.type) { 
       case "radio": 
       case "checkbox": 
        if (this.value==value) { jQuery(this).click(); } 
        break; 
       default: 
        jQuery(this).val(value); 
        break; 
      } 
      break; 
     case "select": 
      jQuery("option",this).each(function(){ 
       if (this.value==value) { this.selected=true; } 
      }); 
      break; 
    } 
    }); 
}); 

मैंने इस कोड का परीक्षण नहीं किया है, इसलिए मुझे उम्मीद है कि कोई मूर्ख वाक्यविन्यास त्रुटियां नहीं हैं जिन्हें मुझे पकड़ा जाना चाहिए था। उम्मीद है की यह मदद करेगा।

मुझे यहां टिप्पणियों पर टिप्पणी करने की अनुमति नहीं है, इसलिए .... टिप्पणी में उल्लेख के अनुसार, jQuery .val (val) विधि रेडियो बटन, चेकबॉक्स और चयन को सेट करती है।

आपको अभी भी अपने jQuery चयनकर्ता पैटर्न में चयन [name = ...] डालना होगा या चुनिंदा तत्व अपडेट नहीं किए जाएंगे।

+3

वैल() फ़ंक्शन पर एक नज़र डालें। यह आपके लिए उन सभी मामलों को संभालता है, मुझे विश्वास है। – nickf

+0

ठीक काम करता है लेकिन वास्तव में वैल() फ़ंक्शन चुनिंदा और अन्य प्रकारों का ख्याल रखता है, इसलिए आपको स्विच का उपयोग करने की आवश्यकता नहीं है, सभी मामलों में एक साधारण jQuery (यह) .val (मान) पर्याप्त है। – gaborous

10

आपके प्रपत्र तत्वों को उनके आईडी FIELDNAME करने के लिए सेट किया है, तो:

$.each(myAssocArry, function(i,val) { $('#'+i).val(val); }); 
+0

यह सीम चेकबॉक्स को याद करने के लिए। यह उन्हें जांच नहीं करता है बल्कि इसके लिए परिभाषित मूल्य को बदलता है। – Pentium10

5

या आईडी के बजाय फील्ड के नाम का उपयोग कर पिछले सुझाव के समान:

$.each(data, function(name,value) { 
    $("input[name='" + name + "']").val(value); 
}); 
+0

अच्छा जवाब, लेकिन वह चयन बॉक्स या textareas नहीं उठाएगा। शायद "इनपुट [name = ...]" को "* [name = ...]" में बदलें? इसके अलावा, मैंने अभी आपके कोड में एक वाक्यविन्यास त्रुटि तय की है। – nickf

+0

मुझे यकीन नहीं है कि '*' काम करेगा, और अगर ऐसा होता है तो यह कुछ हद तक गहन हो सकता है। आप अन्य विकल्पों को अल्पविराम से अलग कर सकते हैं - $ ("इनपुट [नाम ...], [name ...], textarea [name ...])। Val ... –

+0

आप $ (": इनपुट [name = ... ") और इसे चयन और टेक्स्ट क्षेत्र चुनना चाहिए (कोलन नोट करें) –

1

मैंने एक रेडियो या चेकबॉक्स इनपुट के लिए एक एकल (गैर-सरणी) मान को वैल() में पास करने वाले jQuery हैंडल को नहीं देखा है। आपको एकल मान को सरणी में लपेटना सुनिश्चित करना होगा।

मैं आमतौर पर बटन-आईश इनपुट के मानों को बदलना नहीं चाहता था, इसलिए मैं उन्हें फ़िल्टर करता हूं।

यहां एक ऐसा फ़ंक्शन है जो सरणी रैपिंग, बटन फ़िल्टरिंग को संभालता है, और इनपुट चयन को किसी दिए गए फॉर्म तत्व पर भी प्रतिबंधित करता है। फॉर्म पैरामीटर वैकल्पिक है। यदि बाएं बंद/शून्य/अपरिभाषित है, तो पृष्ठ पर सभी इनपुट का चयन किया जाएगा।

function populateForm(data, form) { 
    $.each(data, function(name, value) { 
     var input = $(":input[name='" + name + "']:not(:button,:reset,:submit,:image)", form); 
     input.val((!$.isArray(value) && (input.is(':checkbox') || input.is(':radio'))) ? [ value ] : value); 
    }); 
};