अक्षम किए गए इनपुट चेकबॉक्स को कैसे पोस्ट / सबमिट करें?


130

मेरे पास एक चेकबॉक्स है, जिसे कुछ शर्तों को देखते हुए, अक्षम करने की आवश्यकता है। HTTP बाहर मुड़ता है अक्षम इनपुट पोस्ट नहीं करता है।

मैं उसके आसपास कैसे पहुंच सकता हूं? यदि यह अक्षम है और इनपुट को निष्क्रिय रखते हुए भी इनपुट सबमिट करना है?


मुझे लगता है कि इस समाधान भी यहाँ मदद करता है: stackoverflow.com/questions/12769664/...
Sergej Fomin

मुझे लगता है कि इस समाधान भी यहाँ मदद करता है: stackoverflow.com/questions/12769664/...
Sergej Fomin

जवाबों:


106

अद्यतन : READONLYचेकबॉक्स पर काम नहीं करता है

आप उपयोग कर सकते हैं, disabled="disabled"लेकिन इस बिंदु पर चेकबॉक्स का मान POSTमूल्यों में प्रकट नहीं होगा । एक रणनीति यह है कि एक छिपे हुए फ़ील्ड को चेकबॉक्स के मान को उसी रूप में जोड़ना और उस फ़ील्ड से वापस मान पढ़ना

बस disabledकरने के लिए बदल जाते हैंreadonly


7
इसे मान्य HTML बनाने के लिए, विशेष रूप से आसानी से पढ़ने के लिए, यानी:<input name="foo" value="bar" readonly="readonly" />
मैट हगिंस

5
"अक्षम" फ़ील्ड की तरह LOOK पर "आसानी से" इनपुट फ़ील्ड प्राप्त करने के लिए, 'स्टाइल = "कलर: ग्रे; बैकग्राउंड-कलर: # F0F0F0;"' सेट करें।
डेन निसेनबौम

3
@MattHuggins केवल-विशेषता-नाम विशेषताओं के लिए मान सेट करना, जैसे कि चेक किया हुआ, आसानी से आदि ... और गैर-जोड़ी विशेषताओं पर समाप्ति स्लैश का HTML वैधता से कोई लेना-देना नहीं है - ये XHTML वैधता के लिए आवश्यक हैं ...
jave.web

Btw: शायद इस बारे में किसी को ठोकर मारता है: इनपुट प्रकार = बटन के लिए उपयोग न करें, वे "अक्षम" नहीं होंगे, "अक्षम = 'अक्षम' का उपयोग करेंगे
Meister Schnitzel

2
readonlyकाम नहीं करेगा क्योंकि आप ऐसे टैग के साथ चेकबॉक्स का मान पोस्ट नहीं कर पाएंगे, disabledचेकबॉक्स का मान रखने के लिए छिपे इनपुट तत्व के साथ उपयोग करें , देखें कैसे: stackoverflow.com/a/8274787/448816
mikhail-t

91

मैंने उस समस्या को हल कर दिया है।

चूंकि readonly="readonly"टैग काम नहीं कर रहा है (मैंने विभिन्न ब्राउज़रों की कोशिश की है), आपको disabled="disabled" इसके बजाय उपयोग करना होगा। लेकिन आपके चेकबॉक्स का मूल्य तब पोस्ट नहीं होगा ...

यहाँ मेरा समाधान है:

प्राप्त करने के लिए "केवल पढ़ने के लिए" देखो और पोस्ट एक ही समय में चेकबॉक्स का मूल्य, सिर्फ एक छिपा हुआ "इनपुट" एक ही नाम और अपने चेकबॉक्स के रूप में मूल्य के साथ जोड़ने । आपको इसे अपने चेकबॉक्स के पास या उसी <form></form>टैग के बीच रखना होगा :

<input type="checkbox" checked="checked" disabled="disabled" name="Tests" value="4">SOME TEXT</input>

<input type="hidden" id="Tests" name="Tests" value="4" />

इसके अलावा, बस फिर पता करने के लिए readonly="readonly", readonly="true", readonly="",या सिर्फ READONLYयह हल नहीं होगा! मैंने इसे जानने के लिए कुछ घंटे बिताए हैं!

यह संदर्भ भी प्रासंगिक नहीं है (अभी तक नहीं हो सकता है, या अब नहीं हो सकता है, मुझे कोई पता नहीं है): http://www.w3schools.com/tags/att_input_readonly.asp


यहां छिपे हुए और चेकबॉक्स इनपुट के लिए एक ही आईडी होनी चाहिए?
user2167382 16

नहीं, ईद जो भी हो, लेकिन 'नाम' और 'मूल्य' समान होना चाहिए।
मिखाइल-टी

यह विभिन्न ब्राउज़रों में कितना विश्वसनीय है?
टिम

यह नवीनतम क्रोम, फ़ायरफ़ॉक्स और IE 11 में अच्छी तरह से परीक्षण और काम किया गया था, यहां एक कार्यान्वयन है, इसे अपने ब्राउज़र में आज़माएं: mvccbl.com/…
mikhail-t

74

यदि आप JQuery का उपयोग करके खुश हैं तो फ़ॉर्म सबमिट करते समय अक्षम विशेषता को हटा दें:

$("form").submit(function() {
    $("input").removeAttr("disabled");
});

क्या यह UI में नियंत्रण को "सक्षम" बनाएगा?
अनार खलीलोव

यह अक्षम विशेषता को हटा देता है इसलिए सिद्धांत रूप में हां। व्यवहार में, मुझे नहीं लगता कि उपयोगकर्ता इस होने वाले फॉर्म और सबमिट किए जा रहे फॉर्म के बीच UI के माध्यम से फ़ील्ड को बदल सकता है ... मुझे यकीन है कि यह जानने के लिए दिलचस्पी होगी।
त्रिस्टान चानिंग

थोड़ा पुराना, लेकिन जैसा कि सिडेनोट: यदि आप विशेषता का समर्थन करने <select>वाले <textfield>या अन्य HTML तत्वों का उपयोग करते हैं disabled, तो आप उन्हें चुन सकते हैं और सभी को सक्षम कर सकते हैं: $( "*:disabled" ).removeAttr("disabled");
Gusstavv Gil

10

आप इसे इस तरह से संभाल सकते हैं ... प्रत्येक चेकबॉक्स के लिए, एक ही nameविशेषता के साथ एक छिपी फ़ील्ड बनाएं । लेकिन उस छिपे हुए क्षेत्र के मूल्य को कुछ डिफ़ॉल्ट मान के साथ सेट करें जिसे आप परीक्षण कर सकते हैं। उदाहरण के लिए..

<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />

यदि फॉर्म सबमिट होने पर चेकबॉक्स "चेक" किया जाता है, तो उस फॉर्म पैरामीटर का मान होगा

"agree,false"

यदि चेकबॉक्स की जाँच नहीं की जाती है, तो मान होगा

"false"

आप "झूठे" के बजाय किसी भी मूल्य का उपयोग कर सकते हैं, लेकिन आपको विचार मिलता है।


5
जब आप किसी समस्या के बारे में कुछ जटिल समाधान लिखते हैं तो आप उससे नफ़रत नहीं करते हैं और फिर जब आप ताज़ा करते हैं, तो कोई (फ्रांसेस्को की तरह) एक साधारण एक-लाइनर लिखता है? ;)
जेस्सेग्विन

यह जो मैं पूरा करने की कोशिश कर रहा हूं उसके लिए एकदम सही है, मैं चाहता हूं कि अनचेक किया गया चेक-बॉक्स कुछ भी नहीं के बजाय एक मूल्य प्रस्तुत करे, धन्यवाद: डी।
ज्योफ्री

@jessegavin यह देखते हुए कि उनका 'सिंपल वन लाइनर' अब काम नहीं करता है और उन्होंने आपके एक, किसी को शामिल करने के लिए अपना जवाब अपडेट कर दिया है, मैं यह नहीं कह सकता कि मैं ऐसा करता हूं।
रैनफैस्कॉटलैंड

8
<input type="checkbox" checked="checked" onclick="this.checked=true" />

मैंने इस समस्या से शुरुआत की: "कैसे एक इनपुट चेकबॉक्स को पोस्ट / सबमिट करना है जो अक्षम है?" और मेरे जवाब में मैंने टिप्पणी को छोड़ दिया: "अगर हम एक चेकबॉक्स को निष्क्रिय करना चाहते हैं, तो हमें निश्चित रूप से एक उपसर्ग मूल्य (चेक या अनचेक) रखने की आवश्यकता है और हम यह भी चाहते हैं कि उपयोगकर्ता को इसके बारे में पता हो (अन्यथा हमें एक छिपे हुए प्रकार का उपयोग करना चाहिए) चेकबॉक्स नहीं है) "। मेरे जवाब में मेरा मानना ​​था कि हम हमेशा एक चेकबॉक्स की जाँच करना चाहते हैं और यह कोड इस तरह से काम करता है। अगर हम उस cckckbox पर क्लिक करते हैं तो इसे हमेशा के लिए चेक किया जाएगा और इसका मूल्य POSTED / सबमिशन किया जाएगा! उसी तरह से यदि मैं बिना जांचे = "जाँचे हुए" = "check.checked = false" लिखता हूँ तो "नोट" (नोट: डिफ़ॉल्ट अनियंत्रित है) यह हमेशा के लिए अनियंत्रित हो जाएगा और इसका मान पोस्ट / सब्मिट नहीं होगा!


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


7

इसका सबसे सरल तरीका है:

<input type="checkbox" class="special" onclick="event.preventDefault();" checked />

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

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

http://jsfiddle.net/vwUUc/


4

यह एक आकर्षण की तरह काम करता है:

  1. "अक्षम" विशेषताएँ निकालें
  2. फॉर्म जमा करें
  3. फिर से विशेषताएँ जोड़ें । ऐसा करने का सबसे अच्छा तरीका है कि एक setTimeOut फ़ंक्शन का उपयोग किया जाए , उदाहरण के लिए 1 मिलीसेकंड देरी के साथ।

केवल नुकसान यह है कि सबमिट करते समय अक्षम इनपुट फ़ील्ड की छोटी चमकती है । कम से कम मेरे परिदृश्य में तो यह एक समस्या नहीं है!

$('form').bind('submit', function () {
  var $inputs = $(this).find(':input'),
      disabledInputs = [],
      $curInput;

  // remove attributes
  for (var i = 0; i < $inputs.length; i++) {
    $curInput = $($inputs[i]);

    if ($curInput.attr('disabled') !== undefined) {
      $curInput.removeAttr('disabled');
      disabledInputs.push(true);
    } else 
      disabledInputs.push(false);
  }

  // add attributes
  setTimeout(function() {
    for (var i = 0; i < $inputs.length; i++) {

      if (disabledInputs[i] === true)
        $($inputs[i]).attr('disabled', true);

    }
  }, 1);

});

3

इसे अक्षम न करें; इसके बजाय इसे आसानी से सेट करें, हालांकि यह उपयोगकर्ता को राज्य को बदलने की अनुमति नहीं देने के अनुसार कोई प्रभाव नहीं है। लेकिन आप इसे लागू करने के लिए jQuery का उपयोग कर सकते हैं (उपयोगकर्ता को चेकबॉक्स की स्थिति को बदलने से रोक सकते हैं:

$('input[type="checkbox"][readonly="readonly"]').click(function(e){
    e.preventDefault();
});

यह मानता है कि आपके द्वारा संशोधित किए जाने वाले सभी चेकबॉक्स में "आसानी से" विशेषता नहीं है। जैसे।

<input type="checkbox" readonly="readonly">

इसके लिए शुक्रिया! किसी कारण से, "छिपा हुआ" इनपुट मेरे लिए काम नहीं कर रहा था। इससे मैं बच गया। वास्तव में बहुत अच्छा हैक!
न्यूबीप्रोग्रामर

3

जबसे:

  • चेकबॉक्स में आसानी से सेट करने की विशेषता HTML विनिर्देश के अनुसार मान्य नहीं है,
  • मूल्य जमा करने के लिए छिपे हुए तत्व का उपयोग करना बहुत सुंदर तरीका नहीं है और
  • जावास्क्रिप्ट पर सेट करना जो मूल्य बदलने से रोकता है बहुत अच्छा नहीं है

मैं आपको एक और संभावना देने जा रहा हूँ:

अपने चेकबॉक्स को सामान्य की तरह अक्षम करें। और उपयोगकर्ता द्वारा फॉर्म जमा करने से पहले जावास्क्रिप्ट द्वारा इस चेकबॉक्स को सक्षम करें।

<script>
    function beforeSumbit() {
        var checkbox = document.getElementById('disabledCheckbox');
        checkbox.disabled = false;
    }
</script>
...
<form action="myAction.do" method="post" onSubmit="javascript: beforeSubmit();">
    <checkbox name="checkboxName" value="checkboxValue" disabled="disabled" id="disabledCheckbox" />
    <input type="submit />
</form>

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


1

दुर्भाग्य से कोई 'सरल' समाधान नहीं है। विशेषता आसानी से चेकबॉक्स पर लागू नहीं की जा सकती। मैंने चेकबॉक्स के बारे में डब्ल्यू 3 युक्ति पढ़ी और दोषी पाया:

यदि प्रपत्र सबमिट करते समय किसी नियंत्रण का वर्तमान मान नहीं है, तो उपयोगकर्ता एजेंटों को इसे सफल नियंत्रण के रूप में मानने की आवश्यकता नहीं है। ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )

यह अनियंत्रित स्थिति और अक्षम अवस्था के कारण समान पार्स मूल्य होता है।

  • readonly = "readonly" चेकबॉक्स के लिए मान्य विशेषता नहीं है।
  • onclick = "event.preventDefault ();" हमेशा एक अच्छा समाधान नहीं है क्योंकि यह चेकबॉक्स पर ही चालू होता है। लेकिन यह कुछ अवसरों में आकर्षण का काम कर सकता है।
  • चेकबॉक्स को ऑनबॉक्स सबमिट करना सक्षम नहीं है क्योंकि नियंत्रण अभी भी एक सफल नियंत्रण के रूप में नहीं माना जाता है, इसलिए मूल्य को पार्स नहीं किया जाएगा।
  • अपने HTML में एक ही नाम के साथ एक और छिपा हुआ इनपुट जोड़ने से काम नहीं चलता क्योंकि पहला नियंत्रण मूल्य दूसरे नियंत्रण मूल्य द्वारा अधिलेखित हो जाता है क्योंकि इसका एक ही नाम है।

ऐसा करने का एकमात्र पूर्ण-प्रूफ तरीका है कि फॉर्म सबमिट करने पर जावास्क्रिप्ट के साथ एक ही नाम के साथ एक छिपे हुए इनपुट को जोड़ना है

आप इसके लिए मेरे द्वारा किए गए छोटे स्निपेट का उपयोग कर सकते हैं:

function disabled_checkbox() {
  var theform = document.forms[0];
  var theinputs = theform.getElementsByTagName('input');
  var nrofinputs = theinputs.length;
  for(var inputnr=0;inputnr<nrofinputs;inputnr++) {
    if(theinputs[inputnr].disabled==true) {
      var thevalueis = theinputs[inputnr].checked==true?"on":"";
      var thehiddeninput = document.createElement("input");
      thehiddeninput.setAttribute("type","hidden");
      thehiddeninput.setAttribute("name",theinputs[inputnr].name);
      thehiddeninput.setAttribute("value",thevalueis);
      theinputs[inputnr].parentNode.appendChild(thehiddeninput);
    }
  }
}

यह दस्तावेज़ में पहले फ़ॉर्म के लिए दिखता है, सभी इनपुट को इकट्ठा करता है और अक्षम इनपुट के लिए खोज करता है। जब कोई अक्षम इनपुट पाया जाता है, तो एक छिपे हुए इनपुट को पेरेंटेनोड में एक ही नाम और 'ऑन' (यदि यह स्टेट 'चेक' है) और '' (यदि यह स्टेट है '' - वैल्यू नहीं है) के साथ बनाया जाता है।

इस फ़ंक्शन को FORM तत्व में इवेंट 'ऑनसुबमिट' द्वारा ट्रिगर किया जाना चाहिए:

<form id='ID' action='ACTION' onsubmit='disabled_checkbox();'>


1

hiddenफ़ील्ड के अलावा कोई अन्य विकल्प नहीं है , इसलिए hiddenनीचे दिए गए कोड में प्रदर्शित फ़ील्ड का उपयोग करने का प्रयास करें:

<input type="hidden" type="text" name="chk1[]" id="tasks" value="xyz" >
<input class="display_checkbox" type="checkbox" name="chk1[]" id="tasks" value="xyz" checked="check"  disabled="disabled" >Tasks

0
<html>
    <head>
    <script type="text/javascript">
    function some_name() {if (document.getElementById('first').checked)      document.getElementById('second').checked=false; else document.getElementById('second').checked=true;} 
    </script>
    </head>
    <body onload="some_name();">
    <form>
    <input type="checkbox" id="first" value="first" onclick="some_name();"/>first<br/>
    <input type="checkbox" id="second" value="second" onclick="some_name();" />second
    </form>
    </body>
</html>

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


0

आप इसे वांछित के रूप में अक्षम रख सकते हैं, और फिर फॉर्म सबमिट होने से पहले अक्षम विशेषता को हटा दें।

$('#myForm').submit(function() {
    $('checkbox').removeAttr('disabled');
});

0

onclick="this.checked=true"मेरी समस्या का समाधान जोड़ना :
उदाहरण:

<input type="checkbox" id="scales" name="feature[]" value="scales" checked="checked" onclick="this.checked=true" />

0

यहाँ एक और काम है जो बैकएंड से नियंत्रित किया जा सकता है।

ASPX

<asp:CheckBox ID="Parts_Return_Yes" runat="server" AutoPostBack="false" />

ASPX.CS में

Parts_Return_Yes.InputAttributes["disabled"] = "disabled";
Parts_Return_Yes.InputAttributes["class"] = "disabled-checkbox";

क्लास को केवल स्टाइल के लिए जोड़ा जाता है।


0

मैंने यहाँ जवाबों में केवल HTML, JS और CSS सुझावों को संयोजित किया है

HTML:

<input type="checkbox" readonly>

jQuery:

(function(){
    // Raj: https://stackoverflow.com/a/14753503/260665
    $(document).on('click', 'input[type="checkbox"][readonly]', function(e){
        e.preventDefault();
    });
})();

सीएसएस:

input[type="checkbox"][readonly] {
  cursor: not-allowed;
  opacity: 0.5;
}

चूंकि तत्व 'अक्षम' नहीं है, फिर भी यह POST से गुजरता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.