2010-02-03 28 views
7

का उपयोग कर HTML इनपुट टेक्स्ट बॉक्स की सरणी तक पहुंचने के लिए मैं एक ऐसा फॉर्म बनाना चाहता हूं जिसमें इनपुट टेक्स्ट बॉक्स की गतिशील संख्या हो। मैं प्रत्येक टेक्स्ट बॉक्स को सरणी का हिस्सा बनाने के लिए चाहता हूं (यह सिद्धांत रूप में मेरे लिए लूप करना आसान बनाता है, विशेष रूप से क्योंकि मुझे अंततः मौजूद फ़ील्ड फ़ील्ड की संख्या नहीं पता होगी)। - या कम से कम, कि सिद्धांत हैjQuery या सादा जावास्क्रिप्ट

<p>Field 1: <input type="text" name="field[1]" id="field[1]"></p> 
<p>Field 2: <input type="text" name="field[2]" id="field[2]"></p> 
<p>Field 3: <input type="text" name="field[3]" id="field[3]"></p> 
<p>Field 4: <input type="text" name="field[4]" id="field[4]"></p> 
<p>Field 5: <input type="text" name="field[5]" id="field[5]"></p> 

इस डेटा तो एक PHP स्क्रिप्ट के लिए भेजा जाएगा और एक सरणी के रूप में प्रतिनिधित्व किया जाएगा: एचटीएमएल कोड की तरह कुछ करना चाहते हैं।

तो मेरा पहला सवाल है, क्या यह HTML का उपयोग करके प्राप्त किया जा सकता है? क्या इस तरह से काम करने के लिए डिजाइन किए गए फॉर्म हैं?

यदि इसका उत्तर "हां" है, तो मैं फिर jQuery का उपयोग करके उनमें से प्रत्येक को एक्सेस करने या उसमें विफल होने के बारे में कैसे कहूंगा, सादे पुरानी जावास्क्रिप्ट?

मैं इस निम्नलिखित jQuery कोड का उपयोग कर प्राप्त करने का प्रयास किया:

someval = $('#field[1]').val(); 

और

someval = $('#field')[1].val(); 

और निम्न JavaScript:

someval = document.getElementById('related_link_url')[1].value; 

लेकिन मैं नहीं मिला है कोइ भाग्य।

अग्रिम धन्यवाद।

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

मैं नोट करना चाहिए देखने के एक जावास्क्रिप्ट बिंदु से, मैं यह काम कर रहा है, जहां प्रत्येक तत्व की आईडी field_1 की तरह कुछ है लिया है कि, field_2 आदि हालांकि, मुझे लगता है कि अगर मैं प्रत्येक टेक्स्ट बॉक्स को सरणी में रखकर इसे प्राप्त कर सकते हैं, यह कोड को प्रबंधित करने के लिए आसान और आसान बनाता है।

उत्तर

6

सबसे पहले, id विशेषता में [ या ] वर्ण शामिल नहीं हो सकता है।

इन तत्वों के लिए jQuery/सादे जावास्क्रिप्ट संदर्भ प्राप्त करने के कई तरीके हैं।आप वंशज का भी उपयोग कर सकते हैं:

<fieldset id="list-of-fields"> 
    <!-- your inputs here --> 
</fieldset> 

$("#list-of-fields input"); 
document.getElementById("list....").getElementsByTagName("input"); 

तुम भी विशेषता का भी उपयोग कर सकते हैं:

$("input[name^=field]"); 

मुझे यकीन है कि एक ही रास्ता है कि क्या नहीं कर रहा हूँ, लेकिन मैं सादे जावास्क्रिप्ट में लगता है कि आप सभी को लाने के लिए होगा input तत्व (document.getElementsByTagName) और फिर इन तत्वों के सरणी के माध्यम से लूप करें और प्रत्येक तत्व की जांच करें (चाहे इसमें name विशेषता है जो मान field के साथ शुरू होता है)।

9

प्रत्येक तत्व एक वर्ग दो और समूह jQuery का उपयोग कर का उपयोग:

<p>Field 1: <input type="text" name="field[1]" class="fields"></p> 
<p>Field 2: <input type="text" name="field[2]" class="fields"></p> 
<!-- etc... --> 

jQuery:

$("input.fields").each(function (index) 
{ 
    // Your code here 
}); 

यह "फील्ड" के एक classname के साथ प्रत्येक input तत्व पर गुमनाम समारोह चलेगा, वर्तमान तत्व को इंगित करने वाले this कीवर्ड के साथ। अधिक जानकारी के लिए http://api.jquery.com/each/ देखें।

+0

यह दिलचस्प है। तो नाम फ़ील्ड में [] एस शामिल हो सकता है लेकिन आईडी नहीं हो सकती है। तो कम से कम एक PHP दृष्टिकोण से, मैं अभी भी $ _POST ['फ़ील्ड'] डेटा को सरणी के रूप में समझने में सक्षम हूं? और $ ("इनपुट [नाम = फ़ील्ड [1]]" का उपयोग कर)। वैल() मैं अभी भी jQuery का उपयोग कर मूल्य तक पहुंच सकता हूं। तो कुंजी का उपयोग करना है और आईडी पर निर्भर नहीं है। – greggannicott

+1

@greggannicott: नाम विशेषताओं में स्क्वायर ब्रैकेट की अनुमति है लेकिन आईडी विशेषताओं में नहीं। मुझे लगता है कि PHP के लिए इसका उपयोग करने का सही तरीका सिर्फ 'name = "फ़ील्ड है []" 'प्रत्येक के लिए और नहीं' नाम =" फ़ील्ड [एन] "' लेकिन मुझे गलत हो सकता है और दोनों काम कर सकते हैं। –

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