2012-07-11 14 views
131

क्या ब्राउज़र के लिए यह मानक व्यवहार है कि चेकबॉक्स इनपुट मान डेटा केवल फॉर्म जमा करने पर चेक किया गया हो?क्या <इनपुट प्रकार = "चेकबॉक्स" /> केवल डेटा पोस्ट करते समय पोस्ट किया गया है?

और यदि कोई मूल्य डेटा प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट मान हमेशा "चालू" होता है?

उपरोक्त मानना ​​सही है, क्या यह सभी ब्राउज़रों में लगातार व्यवहार है?

+0

के साथ सभी अनियंत्रित चेक बॉक्स हो रही है यह है 'इनपुट प्रकार =" चेकबॉक्स "/>'; 'इनपुट प्रकार =" चेकबॉक्स "/>' काम नहीं करेगा। –

+0

SO स्वचालित रूप से बदल रहा है \ "..." 'to' "..." '। प्रश्न शीर्षक में '" ... "' है। – Legionar

उत्तर

136

हाँ, मानक व्यवहार करता है, तो चेकबॉक्स चयनित है मूल्य केवल भेजा जाता है। इसका आम तौर पर मतलब है कि आपको याद रखने का एक तरीका होना चाहिए कि सर्वर सर्वर पर आप कौन से चेकबॉक्स की अपेक्षा कर रहे हैं क्योंकि सभी डेटा फॉर्म से वापस नहीं आते हैं।

डिफ़ॉल्ट मान हमेशा "चालू" होता है, यह ब्राउज़र में लगातार होना चाहिए।

यह W3C HTML 4 recommendation में शामिल है:

स (और रेडियो बटन)/बंद स्विच है कि उपयोगकर्ता द्वारा टॉगल किया जा सकता है पर हैं। एक नियंत्रण "चालू" होता है जब नियंत्रण तत्व की जांच विशेषता सेट होती है। जब कोई फॉर्म सबमिट किया जाता है, तो केवल "चालू" चेकबॉक्स नियंत्रण सफल हो सकते हैं।

+9

दुर्भाग्य से यह दर्दनाक थ्रूथ है, केवल चेकबॉक्स को सर्वर पर भेजा जाता है, अनचेक नहीं। यदि आप पहले से जानते हैं कि पेज पर कौन से चेकबॉक्स हैं तो सर्वर प्रबंधन स्क्रिप्ट पर उन्हें प्रबंधित करने में समस्या नहीं है। समस्या यह है कि जब आप कुछ व्यावसायिक तर्क के आधार पर पृष्ठ पर गतिशील रूप से बनाए गए चेकबॉक्स नहीं जानते हैं। फिर आपको उन चेकबॉक्स के लिए चाल बनाना और समांतर हिडन इनपुट फ़ील्ड्स का उपयोग करना होगा और उन्हें जावास्क्रिप्ट से पूरा करना होगा। – sbrbot

+0

"असफल असफल नियंत्रण (यानी टाइप =" चेकबॉक्स ") के साथ एक सतत सत्यापनकर्ता बनाने की कुंजी इन फॉर्म नियंत्रणों को * क्षणिक * के रूप में निर्दिष्ट करना है। जब वे सफल नहीं होते हैं, तो गतिशील रूप से अपने सैनिटाइज़र और सत्यापनकर्ता को तदनुसार बदलें। –

7

क्या यह ब्राउज़र के लिए मानक व्यवहार है केवल चेकबॉक्स इनपुट मूल्य डेटा भेजने के लिए यदि यह फ़ॉर्म जमा करने पर चेक किया गया है?

हाँ, क्योंकि अन्यथा वहाँ अगर चेकबॉक्स वास्तव में जांच की गई है या नहीं का निर्धारण (अगर यह मान बदल का कोई ठोस रास्ता होगा, मामले मौजूद हो सकता है जब अपना इच्छित मान अगर यह जाँच कर रहे थे ही होगा जिसकी इसे बदल दिया गया था)।

और यदि कोई मूल्य डेटा प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट मान हमेशा "चालू" होता है?

अन्य उत्तरों पुष्टि करते हैं कि "चालू" डिफ़ॉल्ट है। हालांकि, अगर आप मूल्य में कोई दिलचस्पी नहीं कर रहे हैं, बस का उपयोग करें:

if (isset($_POST['the_checkbox'])){ 
    // name="the_checkbox" is checked 
} 
43

HTML में, प्रत्येक <input /> तत्व एक ही नाम और मूल्य जोड़ी के साथ जुड़ा हुआ है। यह जोड़ी बाद के अनुरोध में भेजी जाती है (इस मामले में, एक POST अनुरोध निकाय) केवल <input /> "सफल" है।

तो आप अपने <form> डोम में इन इनपुट अगर:

one=foo 
three=first 
three=second 
five=baz 
eight=grault 

सूचना है कि:

<input type="text"  name="one" value="foo"      /> 
<input type="text"  name="two" value="bar" disabled="disabled" /> 
<input type="text"  name="three" value="first"      /> 
<input type="text"  name="three" value="second"      /> 

<input type="checkbox" name="four" value="baz"      /> 
<input type="checkbox" name="five" value="baz" checked="checked" /> 
<input type="checkbox" name="six" value="qux" checked="checked" disabled="disabled" /> 
<input type="checkbox" name=""  value="seven" checked="checked" /> 

<input type="radio" name="eight" value="corge"      /> 
<input type="radio" name="eight" value="grault" checked="checked" /> 
<input type="radio" name="eight" value="garply"      /> 

इन नाम + मूल्य जोड़े जो सर्वर के लिए प्रस्तुत किया जाएगा तैयार करेगा

  • two और six को बाहर रखा गया क्योंकि उनके पासथाविशेषता सेट।
  • three दो बार भेजा गया था क्योंकि इसमें एक ही नाम के साथ दो वैध इनपुट थे।
  • four नहीं भेजा गया था, क्योंकि यह एक checkbox कि नहीं checked
  • six जा रहा है checked क्योंकि disabled विशेषता एक उच्च पूर्वता है के बावजूद नहीं भेजा गया था।
  • seven में name="" विशेषता नहीं है, इसलिए यह सबमिट नहीं किया गया है।
अपने प्रश्न के संबंध में

: आप देख सकते हैं कि एक चेकबॉक्स है कि चेक नहीं किया गया इसलिए इसके नाम + मान युग्म सर्वर के लिए भेजा नहीं होगा - लेकिन अन्य इनपुट का हिस्सा है कि एक ही नाम के साथ भेजा जाएगा।

फ़्रेमवर्क द्वारा (चुपके) इस के आसपास ASP.NET MVC काम की तरह है, प्रदान की गई HTML में एक hidden इनपुट के साथ हर checkbox इनपुट युग्मन तो जैसे:

@Html.CheckBoxFor(m => m.SomeBooleanProperty) 

रेंडर:

<input type="checkbox" name="SomeBooleanProperty" value="true" /> 
<input type="hidden" name="SomeBooleanProperty" value="false" /> 

हैं उपयोगकर्ता चेकबॉक्स की जांच नहीं करता है, तो निम्नलिखित सर्वर पर भेजा जाएगा:

SomeBooleanProperty=false 

उपयोगकर्ता चेकबॉक्स को चेक करता है, तो दोनों भेजा जाएगा:

SomeBooleanProperty=true 
SomeBooleanProperty=false 

लेकिन क्योंकि यह =true हुआ संस्करण सर्वर =false संस्करण पर ध्यान नहीं देगा, और यह है कि निर्धारित कर सकते हैं, इसलिए यदि यह =true नहीं देखता चेकबॉक्स प्रस्तुत किया गया था और उपयोगकर्ता ने इसे जांच नहीं किया - SomeBooleanProperty इनपुट के विपरीत बिल्कुल भी नहीं दिया जा रहा है।

+0

यह ध्यान देने योग्य है कि यदि आपके पास अतिरिक्त फ़ील्ड हैं, जैसे अतिरिक्त छिपे हुए टेक्स्टबॉक्स के साथ, बैकएंड को मानों की एक सरणी प्राप्त होगी। – Salami

+0

यदि आप इनपुट नाम के अंत में '[] 'का उपयोग करते हैं तो यह केवल एक सरणी प्राप्त करता है, डिफ़ॉल्ट व्यवहार है केवल उस नाम के साथ अंतिम तत्व सबमिट करें, ताकि जब तक छुपा इनपुट चेकबॉक्स से पहले हो, यह काम करेगा। – beeglebug

+0

एक ही नाम (छुपा फ़ील्ड + चेकबॉक्स फ़ील्ड) के साथ दो फ़ील्ड होने और चेकबॉक्स की जांच करके, पोस्ट मूल्य मानों की एक अल्पविराम से अलग स्ट्रिंग है, यानी "0,1" –

7

एचटीएमएल 4 कल्पना है, जो लगभग सभी ब्राउज़र में अनुरूप होना चाहिए से:

http://www.w3.org/TR/html401/interact/forms.html#checkbox

स (और रेडियो बटन) कर रहे हैं/बंद स्विच है कि उपयोगकर्ता द्वारा टॉगल किया जा सकता है पर। एक नियंत्रण "चालू" होता है जब नियंत्रण तत्व की जांच विशेषता सेट होती है। जब कोई फॉर्म सबमिट किया जाता है, तो केवल "चालू" चेकबॉक्स नियंत्रण सफल हो सकते हैं।

एक सफल नियंत्रण प्रस्तुत करने के लिए "वैध" है: इस प्रकार

सफल परिभाषित किया गया है। प्रत्येक सफल नियंत्रण में इसके नियंत्रण मूल्य को के सबमिट किए गए फॉर्म डेटा सेट के हिस्से के रूप में वर्तमान मूल्य के साथ जोड़ा गया है। एक सफल नियंत्रण को को एक FORM तत्व के भीतर परिभाषित किया जाना चाहिए और उसके पास नियंत्रण नाम होना चाहिए।

12

यदि चेकबॉक्स चेक नहीं किया गया है तो यह फ़ॉर्म सबमिशन पर भेजे गए डेटा में योगदान नहीं देता है।

एचटीएमएल 5 अनुभाग 4.10.22.4 Constructing the form data set रास्ता प्रपत्र डेटा का निर्माण किया है वर्णन करता है:

तो निम्न स्थितियों में से किसी से मुलाकात कर रहे हैं, तो इस तत्व के लिए इन substeps छोड़ें: [...]

फ़ील्ड तत्व एक इनपुट तत्व है जिसका प्रकार विशेषता चेकबॉक्स स्थिति में है और इसकी जांच गलत है।

और फिर डिफ़ॉल्ट मूल्यवान अगर value याद आ रही है on निर्दिष्ट किया जाता है: यदि क्षेत्र तत्व एक इनपुट तत्व जिसका प्रकार विशेषता चेकबॉक्स राज्य या रेडियो बटन राज्य में है

अन्यथा, है, तो इन आगे घोंसले वाले पदार्थों को चलाएं:

यदि फ़ील्ड तत्व में एक मान विशेषता निर्दिष्ट है, तो मान उस विशेषता का मान हो; अन्यथा, मूल्य को "चालू" होना चाहिए।

इस प्रकार अनचेक चेकबॉक्स फॉर्म डेटा निर्माण के दौरान छोड़ दिए जाते हैं।

इसी तरह के व्यवहार HTML4 के तहत आवश्यक है। सभी व्यवहार ब्राउज़रों से इस व्यवहार की अपेक्षा करना उचित है।

0

बस एएसपी.NET संस्करण की तरह, वास्तविक चेकबॉक्स (उसी नाम के) से पहले एक ही नाम के साथ छुपा इनपुट डालने के अलावा। केवल अंतिम मान भेजे जाएंगे। इस तरह यदि कोई बॉक्स चेक किया गया है तो उसका नाम और मान "चालू" भेजा जाता है, जबकि यदि यह अनचेक किया जाता है तो संबंधित छिपी हुई इनपुट का नाम और जो भी मूल्य आप इसे देना चाहते हैं उसे भेजा जाएगा। अंत में आपको पढ़ने के लिए $ _POST सरणी मिल जाएगी, इसमें सभी चेक किए गए और अनचेक तत्व, "चालू" और "झूठे" मानों के साथ, कोई डुप्लिकेट कुंजी नहीं होगी। PHP में प्रक्रिया करने में आसान है।

8

चेकबॉक्स मूल्य 'ऑन' पोस्ट कर रहे हैं यदि केवल चेकबॉक्स चेक किया गया हो। पकड़ने चेकबॉक्स मूल्य की Insted आप छिपा आदानों

उपयोग कर सकते हैं

जे एस:

var chk = $('input[type="checkbox"]'); 
    chk.each(function(){ 
     var v = $(this).attr('checked') == 'checked'?1:0; 
     $(this).after('<input type="hidden" name="'+$(this).attr('rel')+'" value="'+v+'" />'); 
    }); 

chk.change(function(){ 
     var v = $(this).is(':checked')?1:0; 
     $(this).next('input[type="hidden"]').val(v); 
    }); 

एचटीएमएल:

<label>Active</label><input rel="active" type="checkbox" /> 
-2

मैं इस कोड के साथ समस्या का समाधान:

HTML फ़ॉर्म

<input type="checkbox" id="is-business" name="is-business" value="off" onclick="changeValueCheckbox(this)" > 
<label for="is-business">Soy empresa</label> 

और परिवर्तन से जावास्क्रिप्ट समारोह चेकबॉक्स मूल्य प्रपत्र:

//change value of checkbox element 
function changeValueCheckbox(element){ 
    if(element.checked){ 
    element.value='on'; 
    }else{ 
    element.value='off'; 
    } 
} 

और सर्वर की जाँच करता है, तो डेटा पोस्ट "पर" या "बंद" है। मैं playframework जावा

 final Map<String, String[]> data = request().body().asFormUrlEncoded(); 

     if (data.get("is-business")[0].equals('on')) { 
      login.setType(new MasterValue(Login.BUSINESS_TYPE)); 
     } else { 
      login.setType(new MasterValue(Login.USER_TYPE)); 
     } 
0

इस्तेमाल किया अनियंत्रित चेक बॉक्स कि प्रस्तुत रूपों पर नहीं भेज दिया जाएगा के साथ एक ही समस्या है, मैं चेकबॉक्स आइटम दर्पण की तुलना में एक एक और समाधान के साथ बाहर आया था।

var checkboxQueryString; 

$form.find ("input[type=\"checkbox\"]:not(\":checked\")").each(function(i, e) { 
    checkboxQueryString += "&" + $(e).attr("name") + "=N" 
}); 
संबंधित मुद्दे