मेरे पास एक चेकबॉक्स है, जिसे कुछ शर्तों को देखते हुए, अक्षम करने की आवश्यकता है। HTTP बाहर मुड़ता है अक्षम इनपुट पोस्ट नहीं करता है।
मैं उसके आसपास कैसे पहुंच सकता हूं? यदि यह अक्षम है और इनपुट को निष्क्रिय रखते हुए भी इनपुट सबमिट करना है?
मेरे पास एक चेकबॉक्स है, जिसे कुछ शर्तों को देखते हुए, अक्षम करने की आवश्यकता है। HTTP बाहर मुड़ता है अक्षम इनपुट पोस्ट नहीं करता है।
मैं उसके आसपास कैसे पहुंच सकता हूं? यदि यह अक्षम है और इनपुट को निष्क्रिय रखते हुए भी इनपुट सबमिट करना है?
जवाबों:
अद्यतन : READONLY
चेकबॉक्स पर काम नहीं करता है
आप उपयोग कर सकते हैं, disabled="disabled"
लेकिन इस बिंदु पर चेकबॉक्स का मान POST
मूल्यों में प्रकट नहीं होगा । एक रणनीति यह है कि एक छिपे हुए फ़ील्ड को चेकबॉक्स के मान को उसी रूप में जोड़ना और उस फ़ील्ड से वापस मान पढ़ना
बस disabled
करने के लिए बदल जाते हैंreadonly
<input name="foo" value="bar" readonly="readonly" />
readonly
काम नहीं करेगा क्योंकि आप ऐसे टैग के साथ चेकबॉक्स का मान पोस्ट नहीं कर पाएंगे, disabled
चेकबॉक्स का मान रखने के लिए छिपे इनपुट तत्व के साथ उपयोग करें , देखें कैसे: stackoverflow.com/a/8274787/448816
मैंने उस समस्या को हल कर दिया है।
चूंकि 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
यदि आप JQuery का उपयोग करके खुश हैं तो फ़ॉर्म सबमिट करते समय अक्षम विशेषता को हटा दें:
$("form").submit(function() {
$("input").removeAttr("disabled");
});
<select>
वाले <textfield>
या अन्य HTML तत्वों का उपयोग करते हैं disabled
, तो आप उन्हें चुन सकते हैं और सभी को सक्षम कर सकते हैं: $( "*:disabled" ).removeAttr("disabled");
आप इसे इस तरह से संभाल सकते हैं ... प्रत्येक चेकबॉक्स के लिए, एक ही name
विशेषता के साथ एक छिपी फ़ील्ड बनाएं । लेकिन उस छिपे हुए क्षेत्र के मूल्य को कुछ डिफ़ॉल्ट मान के साथ सेट करें जिसे आप परीक्षण कर सकते हैं। उदाहरण के लिए..
<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />
यदि फॉर्म सबमिट होने पर चेकबॉक्स "चेक" किया जाता है, तो उस फॉर्म पैरामीटर का मान होगा
"agree,false"
यदि चेकबॉक्स की जाँच नहीं की जाती है, तो मान होगा
"false"
आप "झूठे" के बजाय किसी भी मूल्य का उपयोग कर सकते हैं, लेकिन आपको विचार मिलता है।
<input type="checkbox" checked="checked" onclick="this.checked=true" />
मैंने इस समस्या से शुरुआत की: "कैसे एक इनपुट चेकबॉक्स को पोस्ट / सबमिट करना है जो अक्षम है?" और मेरे जवाब में मैंने टिप्पणी को छोड़ दिया: "अगर हम एक चेकबॉक्स को निष्क्रिय करना चाहते हैं, तो हमें निश्चित रूप से एक उपसर्ग मूल्य (चेक या अनचेक) रखने की आवश्यकता है और हम यह भी चाहते हैं कि उपयोगकर्ता को इसके बारे में पता हो (अन्यथा हमें एक छिपे हुए प्रकार का उपयोग करना चाहिए) चेकबॉक्स नहीं है) "। मेरे जवाब में मेरा मानना था कि हम हमेशा एक चेकबॉक्स की जाँच करना चाहते हैं और यह कोड इस तरह से काम करता है। अगर हम उस cckckbox पर क्लिक करते हैं तो इसे हमेशा के लिए चेक किया जाएगा और इसका मूल्य POSTED / सबमिशन किया जाएगा! उसी तरह से यदि मैं बिना जांचे = "जाँचे हुए" = "check.checked = false" लिखता हूँ तो "नोट" (नोट: डिफ़ॉल्ट अनियंत्रित है) यह हमेशा के लिए अनियंत्रित हो जाएगा और इसका मान पोस्ट / सब्मिट नहीं होगा!
एक सीएसएस वर्ग बनाएं जैसे:
.disable{
pointer-events: none;
opacity: 0.5;
}
अक्षम विशेषता के बजाय इस वर्ग को लागू करें
इसका सबसे सरल तरीका है:
<input type="checkbox" class="special" onclick="event.preventDefault();" checked />
यह उपयोगकर्ता को इस चेकबॉक्स को रद्द करने में सक्षम होने से रोकेगा और फॉर्म जमा करने के बाद भी यह अपना मूल्य जमा करेगा। चेक हटाएं यदि आप चाहते हैं कि उपयोगकर्ता इस चेकबॉक्स का चयन करने में सक्षम नहीं है।
इसके अलावा, आप तब जावास्क्रिप्ट का उपयोग कर सकते हैं जब एक निश्चित शर्त पूरी हो जाने के बाद onclick को खाली कर दें (यदि ऐसा आपके बाद हो)। यहाँ नीचे-और-गंदी फ़िडेल दिखाई दे रही है जो मेरा मतलब है। यह बिल्कुल सही नहीं है, लेकिन आप इसे प्राप्त करते हैं।
यह एक आकर्षण की तरह काम करता है:
केवल नुकसान यह है कि सबमिट करते समय अक्षम इनपुट फ़ील्ड की छोटी चमकती है । कम से कम मेरे परिदृश्य में तो यह एक समस्या नहीं है!
$('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);
});
इसे अक्षम न करें; इसके बजाय इसे आसानी से सेट करें, हालांकि यह उपयोगकर्ता को राज्य को बदलने की अनुमति नहीं देने के अनुसार कोई प्रभाव नहीं है। लेकिन आप इसे लागू करने के लिए jQuery का उपयोग कर सकते हैं (उपयोगकर्ता को चेकबॉक्स की स्थिति को बदलने से रोक सकते हैं:
$('input[type="checkbox"][readonly="readonly"]').click(function(e){
e.preventDefault();
});
यह मानता है कि आपके द्वारा संशोधित किए जाने वाले सभी चेकबॉक्स में "आसानी से" विशेषता नहीं है। जैसे।
<input type="checkbox" readonly="readonly">
जबसे:
मैं आपको एक और संभावना देने जा रहा हूँ:
अपने चेकबॉक्स को सामान्य की तरह अक्षम करें। और उपयोगकर्ता द्वारा फॉर्म जमा करने से पहले जावास्क्रिप्ट द्वारा इस चेकबॉक्स को सक्षम करें।
<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>
फॉर्म सबमिट करने से पहले चेकबॉक्स सक्षम होने के कारण, इसका मान सामान्य तरीके से पोस्ट किया जाता है। केवल एक चीज जो इस समाधान के बारे में बहुत सुखद नहीं है वह यह है कि यह चेकबॉक्स थोड़ी देर के लिए सक्षम हो जाता है और इसे उपयोगकर्ताओं द्वारा देखा जा सकता है। लेकिन यह सिर्फ एक विवरण है जिसके साथ मैं रह सकता हूं।
दुर्भाग्य से कोई 'सरल' समाधान नहीं है। विशेषता आसानी से चेकबॉक्स पर लागू नहीं की जा सकती। मैंने चेकबॉक्स के बारे में डब्ल्यू 3 युक्ति पढ़ी और दोषी पाया:
यदि प्रपत्र सबमिट करते समय किसी नियंत्रण का वर्तमान मान नहीं है, तो उपयोगकर्ता एजेंटों को इसे सफल नियंत्रण के रूप में मानने की आवश्यकता नहीं है। ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
यह अनियंत्रित स्थिति और अक्षम अवस्था के कारण समान पार्स मूल्य होता है।
ऐसा करने का एकमात्र पूर्ण-प्रूफ तरीका है कि फॉर्म सबमिट करने पर जावास्क्रिप्ट के साथ एक ही नाम के साथ एक छिपे हुए इनपुट को जोड़ना है ।
आप इसके लिए मेरे द्वारा किए गए छोटे स्निपेट का उपयोग कर सकते हैं:
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();'>
onsubmit="this['*nameofyourcheckbox*'].disabled=false"
प्रपत्र में जोड़ें ।
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
<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 दूसरे चेकबॉक्स को प्रबंधित करने के लिए पिछले क्लॉज का एक उदाहरण है, जो चेक किया गया है (इसके मूल्य पोस्ट करता है) या खंड के अनुसार अनियंत्रित (इसके मूल्य को पोस्ट नहीं करता है) और उपयोगकर्ता इसकी स्थिति को संशोधित नहीं कर सकता है; दूसरे चेकबॉक्स के किसी भी अक्षम को प्रबंधित करने की आवश्यकता नहीं है
आप इसे वांछित के रूप में अक्षम रख सकते हैं, और फिर फॉर्म सबमिट होने से पहले अक्षम विशेषता को हटा दें।
$('#myForm').submit(function() {
$('checkbox').removeAttr('disabled');
});
यहाँ एक और काम है जो बैकएंड से नियंत्रित किया जा सकता है।
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";
क्लास को केवल स्टाइल के लिए जोड़ा जाता है।
मैंने यहाँ जवाबों में केवल 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 से गुजरता है।