2012-03-30 12 views
11

मैंने देखा है कि यदि आपके पास एक साथ दो रेडियो हैं, तो आपको रेडियो की उम्मीद के अनुसार काम करने के लिए नाम विशेषता को समान बनाना होगा:इनपुट विशेषताएँ जिनमें एक ही "नाम" हो सकता है

<label for="a1"><input type="radio" name="a" id="a1" value="1">1</label> 
    <label for="a2"><input type="radio" name="a" id="a2" value="2">2</label> 
    <label for="a3"><input type="radio" name="a" id="a3" value="3">3</label> 
    <label for="a4"><input type="radio" name="a" id="a4" value="4">4</label> 

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

मैं यह पूछ रहा हूं क्योंकि मुझे इस स्थिति को एक स्क्रिप्ट में संभालने की आवश्यकता है, और जानना चाहते हैं कि कई समान प्रकारों से निपटने के दौरान मुझे अन्य इनपुट प्रकारों को ध्यान में रखना चाहिए या नहीं।

उत्तर

12

एक उपयोगकर्ता के बातचीत के दृष्टिकोण से, input:radio तत्व एक ही [name] ताकि ब्राउज़र केवल एक समय में एक :checked होने के लिए अनुमति देने के लिए जानता है का उपयोग करें।

एक रूप प्रस्तुत दृष्टिकोण से, किसी भी तत्व को एक ही नाम हो सकता है, वे सब क्वेरी स्ट्रिंग में के रूप में HTML Spec

यहाँ में परिभाषित श्रृंखलाबद्ध किया जाएगा कुछ उदाहरण:

<form action="/foo/bar"> 
    <input type="hidden" name="fizz" value="buzz" /> 
    <input type="radio" name="foo" value="bar" /> 
    <input type="radio" name="foo" value="baz" /> 
    <input type="submit" value="Go" /> 
</form> 

?fizz=buzz&foo=bar 

हो: इस प्रपत्र (bar रेडियो बटन की जाँच के साथ) को जमा का एक क्वेरी स्ट्रिंग में परिणाम होगा wever सकता है, अगर आप foo को input:hidden तत्व का नाम बदलने:

<form action="/foo/bar"> 
    <input type="hidden" name="foo" value="buzz" /> 
    <input type="radio" name="foo" value="bar" /> 
    <input type="radio" name="foo" value="baz" /> 
    <input type="submit" value="Go" /> 
</form> 

क्वेरी स्ट्रिंग हो जाएगा:

?foo=buzz&foo=bar 

सर्वर सही ढंग से इस पार्स ताकि आप दोनों buzz और bar प्राप्त कर सकते हैं चाहिए मान, हालांकि मुझे पता चला है कि कुछ स्ट्रिंग पार्सिंग की बात आती है जब कुछ सर्वर-साइड भाषाओं में क्विर्क होते हैं।

विशेष रूप से

पीएचपी विन्यास में, कुंजी हो जाएगा अगर कुंजी [] साथ प्रत्यय है:

?foo[]=buzz&foo[]=bar$_GET['foo'] = array('buzz', 'bar');

9

रेडियो इनपुट केवल इनपुट प्रकार आप डुप्लिकेट नाम हो सकता है जहां विशेषताओं

नहीं। किसी भी रूप नियंत्रण किसी अन्य रूप नियंत्रण के साथ एक नाम साझा कर सकते हैं है।

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

(और ऐसा करने की आवश्यकता है)?

हां। साझा किए गए नामों के आधार पर केवल रेडियो बटन विशेष व्यवहार प्राप्त करते हैं।

+0

सर्वर साइड कि वे किस तरह बाध्य पार्स किए जाते हैं/के मामले में अन्य तत्वों का हिस्सा है कि एक ही नाम के लिए "विशेष" व्यवहार, हो सकता है। बेशक यह एचटीएमएल स्पेक का हिस्सा नहीं है और फ्रेमवर्क से फ्रेमवर्क में भिन्न होता है। – AaronLS

1

खैर, तकनीकी रूप से जो कुछ मायने रखता है वह यूआरएल स्ट्रिंग उत्पन्न होता है। तो तुम सैद्धांतिक रूप से दो ही नाम के साथ बटन प्रस्तुत ...

1

नहीं, कुछ अन्य नियंत्रण dup नाम के साथ मौजूद हैं हो सकता था;)

2

यह नाम पृष्ठों पर विशेषताओं के लिए एक ही मूल्य है करने के लिए पूरी तरह से वैध है।

चेकबॉक्स के लिए एक आम फॉलबैक एक ही नाम के छिपे हुए इनपुट को false पर सेट मान के साथ है। समान नाम मानों का उपयोग करते समय, अपेक्षित आउटपुट को दोबारा जांचना सुनिश्चित करें, आमतौर पर पार्स किए जाने वाले नवीनतम मान को उसी नाम के किसी भी पिछले पैरामीटर को ओवरराइट कर दिया जाएगा।

को समूह में विभिन्न क्षेत्रों में एक ही नाम के तहत आप वास्तव में कई तत्वों के साथ एक सरणी बना सकते हैं, जैसे की जरूरत है:

<input name="list[]" /> 
<input name="list[]" /> 
<input name="list[]" /> 
+0

छुपा क्षेत्र सुरक्षा जोखिम के बारे में भी सावधान रहें! –

+2

अंतिम मान मानना ​​होगा कि नाम के अंत में '[] 'ब्रह्मांड का * बहुत * PHP-केंद्रित दृश्य है। – Quentin

+1

@ आशोकराज किस प्रकार के सुरक्षा जोखिम छिपे हुए फ़ील्ड करते हैं, यह बताते हैं कि किसी अन्य प्रकार का इनपुट नहीं है? – Dunhamzzz

0

कुछ तत्वों के नाम या जब इस्तेमाल किया कई बार सिर्फ HTML पार्सर द्वारा अनदेखी कर रहे हैं जिम्मेदार बताते हैं
उदाहरण के लिए यदि आप एक से अधिक आईडी का उपयोग करते हैं तो केवल पहले माना जाता है।

+0

ध्यान दें कि आप 'id' के बारे में बात कर रहे हैं, जिसका आपके द्वारा उल्लिखित कारणों के लिए डुप्लिकेट नहीं होना चाहिए। हालांकि 'नाम' में आपके पास एकाधिक हो सकते हैं। – AaronLS

1

तुम भी एक ही नाम के कई छिपा आदानों हो सकता होगा। जैसा कि बताया गया है कि यह एक बात है कि सर्वर साइड फ्रेमवर्क उन्हें कैसे पार्स करेगा। .NET MVC में मॉडल बाइंडर पोस्ट एक्शन विधि के पैरामीटर या पोस्ट एक्शन के दृश्य मॉडल पैरामीटर पर एक संपत्ति के समान नाम के संग्रह की तलाश करेगा। जैसे List<int>, List<Guid>, या List<string>

एक उदाहरण के रूप में देखें: https://stackoverflow.com/a/2013915/84206

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