क्या HTML चेकबॉक्स को केवल पढ़ने के लिए सेट किया जा सकता है?




checkbox (20)

मैंने सोचा कि वे हो सकते हैं, लेकिन जैसा कि मैं अपना पैसा नहीं लगा रहा हूं, जहां मेरा मुंह था (इसलिए बोलने के लिए) पाठक विशेषता को वास्तव में कुछ भी नहीं लगता है।

मैं अक्षम का उपयोग नहीं करना चाहूंगा, क्योंकि मैं चेक बॉक्स को शेष फॉर्म के साथ सबमिट करना चाहता हूं, मैं नहीं चाहता कि क्लाइंट कुछ परिस्थितियों में उन्हें बदलने में सक्षम हो।


मैं नहीं चाहता कि ग्राहक कुछ परिस्थितियों में उन्हें बदलने में सक्षम हो।

वास्तव में खुद काम नहीं करेगा। आप कुछ फंकी डब्ल्यू / सीएसएस करने में सक्षम हो सकते हैं लेकिन हम आमतौर पर उन्हें अक्षम कर देते हैं।

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


onclick = "जावास्क्रिप्ट: झूठी वापसी;"


उपरोक्त उत्तरों पर बिल्डिंग, यदि jQuery का उपयोग करते हैं, तो यह सभी इनपुट के लिए एक अच्छा समाधान हो सकता है:

<script>
    $(function () {
        $('.readonly input').attr('readonly', 'readonly');
        $('.readonly textarea').attr('readonly', 'readonly');
        $('.readonly input:checkbox').click(function(){return false;});
        $('.readonly input:checkbox').keydown(function () { return false; });
    });
</script>

मैं इसे कुछ फॉर्म तत्वों को केवल पढ़ने के लिए Asp.Net MVC के साथ उपयोग कर रहा हूं। ऊपर दिए गए परिदृश्यों जैसे किसी भी मूल कंटेनर को सेट करके पाठ और चेक बॉक्स के लिए उपरोक्त कार्य करता है:

<div class="editor-field readonly">
    <input id="Date" name="Date" type="datetime" value="11/29/2012 4:01:06 PM" />
</div>
<fieldset class="flags-editor readonly">
     <input checked="checked" class="flags-editor" id="Flag1" name="Flags" type="checkbox" value="Flag1" />
</fieldset>

एक और "सरल समाधान":

<!-- field that holds the data -->
<input type="hidden" name="my_name" value="1" /> 
<!-- visual dummy for the user -->
<input type="checkbox" name="my_name_visual_dummy" value="1" checked="checked" disabled="disabled" />

अक्षम = "अक्षम" / अक्षम = सत्य


नवीनतम Jquery में यह सुविधा है

$ ("# txtname")। prop ('readonly', false);


पार्टी के लिए बहुत देर हो चुकी है लेकिन मुझे एमवीसी (5) के लिए एक जवाब मिला, मैंने चेकबॉक्स को अक्षम कर दिया और चेकबॉक्स से पहले एक छिपी हुई फोर जोड़ा, इसलिए जब यह छिपी हुई फ़ील्ड को पहले पाता है और उस मान का उपयोग करता है तो पोस्टिंग करते समय। यह काम करता है।

 <div class="form-group">
     @Html.LabelFor(model => model.Carrier.Exists, new { @class = "control-label col-md-2" })
         <div class="col-md-10">
              @Html.HiddenFor(model => model.Carrier.Exists)
              @Html.CheckBoxFor(model => model.Carrier.Exists, new { @disabled = "disabled" })
              @Html.ValidationMessageFor(model => model.Carrier.Exists)
          </div>
 </div>

फॉर्म जमा करते समय, हम वास्तव में चेकबॉक्स का मान पास करते हैं, न कि राज्य (चेक / अनचेक)। केवल वही विशेषता हमें मूल्य को संपादित करने से रोकती है, लेकिन राज्य नहीं। यदि आप केवल पढ़ने के लिए फ़ील्ड रखना चाहते हैं जो उस मान का प्रतिनिधित्व करेगा जो आप सबमिट करना चाहते हैं, तो रीडोनली टेक्स्ट का उपयोग करें।


बहुत देर से योगदान ... लेकिन वैसे भी। पेज लोड पर, वर्तमान में चुने गए सभी को छोड़कर सभी चेकबॉक्स अक्षम करने के लिए jquery का उपयोग करें। फिर वर्तमान में चयनित एक को केवल पढ़ने के रूप में सेट करें ताकि यह अक्षम लोगों के समान दिख सके। उपयोगकर्ता मान नहीं बदल सकता है, और चयनित मान अभी भी सबमिट करता है।


मुझे नीचे दिए गए समाधान पर ध्यान दिया गया। इसे एक ही मुद्दे के लिए मेरा शोध मिला। मैं नहीं जानता कि इसे किसने पोस्ट किया था लेकिन यह मेरे द्वारा नहीं बनाया गया था। यह jQuery का उपयोग करता है:

$(document).ready(function() {
    $(":checkbox").bind("click", false);
});

यह चेकबॉक्स केवल पढ़ने के लिए क्लाइंट को केवल पढ़ने के लिए उपयोगी होगा।


मुझे पता है कि "अक्षम" स्वीकार्य उत्तर नहीं है, क्योंकि सेशन इसे पोस्ट करना चाहता है। हालांकि, यदि आपके पास केवल पढ़ने योग्य विकल्प सेट है, तो भी आपको हमेशा सर्वर पक्ष पर मानों को मान्य करना होगा। ऐसा इसलिए है क्योंकि आप किसी दुर्भावनापूर्ण उपयोगकर्ता को केवल पढ़ने योग्य विशेषता का उपयोग करके मूल्य पोस्ट करने से नहीं रोक सकते हैं।

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

यह एक पठनीय मूल्य की तरह दिखता और व्यवहार करेगा। और यह दुर्भावनापूर्ण उपयोगकर्ताओं से पोस्ट को अनदेखा करता है (अनदेखा करता है)। आप एक पत्थर के साथ 2 पक्षियों की हत्या कर रहे हैं।


मैंने ConroyP के उत्तर पर टिप्पणी की होगी, लेकिन इसके लिए 50 प्रतिष्ठा की आवश्यकता है जो मेरे पास नहीं है। मेरे पास एक और जवाब पोस्ट करने के लिए पर्याप्त प्रतिष्ठा है। माफ़ कीजिये।

ConroyP के उत्तर में समस्या यह है कि चेकबॉक्स को पृष्ठ पर भी शामिल न करके इसे परिवर्तनीय प्रदान किया जाता है। यद्यपि Electrons_Ahoy जितना अधिक निर्धारित नहीं करता है, सबसे अच्छा जवाब वह होगा जिसमें परिवर्तनीय चेकबॉक्स समान दिखाई देगा, यदि परिवर्तनीय चेकबॉक्स जैसा नहीं है, जैसा कि "अक्षम" विशेषता लागू होती है। एक समाधान जो दो कारणों को संबोधित करता है Electrons_Ahoy "अक्षम" विशेषता का उपयोग नहीं करना चाहता है, यह अमान्य नहीं होगा क्योंकि यह "अक्षम" विशेषता का उपयोग करता है।

दो बूलियन चर, $ चेक और $ अक्षम मान लें:

if ($checked && $disabled)
    echo '<input type="hidden" name="my_name" value="1" />';
echo '<input type="checkbox" name="my_name" value="1" ',
    $checked ? 'checked="checked" ' : '',
    $disabled ? 'disabled="disabled" ' : '', '/>';

यदि चेक किया गया चेक चेक सही है तो चेकबॉक्स को चेक के रूप में प्रदर्शित किया जाता है। यदि चेक किया गया चेक गलत है तो चेकबॉक्स अनचेक के रूप में प्रदर्शित होता है। यदि उपयोगकर्ता $ अक्षम है तो उपयोगकर्ता चेकबॉक्स की स्थिति बदल सकता है। उपयोगकर्ता द्वारा या नहीं, जब चेकबॉक्स अनचेक किया जाता है, तो "my_name" पैरामीटर पोस्ट नहीं किया जाता है। "My_name = 1" पैरामीटर पोस्ट किया गया है जब चेकबॉक्स चेक किया गया है, उपयोगकर्ता द्वारा या नहीं। मेरा मानना ​​है कि यही इलेक्ट्रान_एहॉय की तलाश में था।


मैंने परिणामों को प्राप्त करने के लिए इसका इस्तेमाल किया:

<input type=checkbox onclick="return false;" onkeydown="return false;" />

यदि कोई और एमवीसी और एक संपादक टेम्पलेट का उपयोग कर रहा है, तो इस तरह मैं केवल पढ़ने वाली संपत्ति को प्रदर्शित करने पर नियंत्रण करता हूं (यदि मैं कथन में मान प्राप्त करने के लिए कस्टम विशेषता का उपयोग करता हूं)

@if (true)
{
    @Html.HiddenFor(m => m)
    @(ViewData.Model ? Html.Raw("Yes") : Html.Raw("No"))
} 
else
{               
    @Html.CheckBoxFor(m => m)
}

यह एक उपयोगिता मुद्दा थोड़ा सा प्रस्तुत करता है।

यदि आप एक चेकबॉक्स प्रदर्शित करना चाहते हैं, लेकिन इसके साथ बातचीत नहीं करने दें, तो फिर भी एक चेकबॉक्स क्यों?

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

यानी ऐसा कुछ:

var form = document.getElementById('yourform');
form.onSubmit = function () 
{ 
    var formElems = document.getElementsByTagName('INPUT');
    for (var i = 0; i , formElems.length; i++)
    {  
       if (formElems[i].type == 'checkbox')
       { 
          formElems[i].disabled = false;
       }
    }
}

यहां पर कुछ जवाब थोड़ा चौराहे लगते हैं, लेकिन यहां एक छोटा हैक है।

<form id="aform" name="aform" method="POST">
    <input name="chkBox_1" type="checkbox" checked value="1" disabled="disabled" />
    <input id="submitBttn" type="button" value="Submit" onClick='return submitPage();'>
</form>​

फिर jquery में आप या तो दो विकल्पों में से एक चुन सकते हैं:

$(document).ready(function(){
    //first option, you don't need the disabled attribute, this will prevent
    //the user from changing the checkbox values
    $("input[name^='chkBox_1']").click(function(e){
        e.preventDefault();
    });

    //second option, keep the disabled attribute, and disable it upon submit
    $("#submitBttn").click(function(){
        $("input[name^='chkBox_1']").attr("disabled",false);
        $("#aform").submit();
    });

});

डेमो: http://jsfiddle.net/5WFYt/


वास्तव में चेकबॉक्स पर काम नहीं करता है क्योंकि यह आपको किसी फ़ील्ड के मान को संपादित करने से रोकता है, लेकिन चेकबॉक्स के साथ आप वास्तव में फ़ील्ड के राज्य को संपादित कर रहे हैं (बंद || पर)

faqs.org :

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

यदि आप disabled का उपयोग नहीं करना चाहते हैं, लेकिन फिर भी मान जमा करना चाहते हैं, मूल्य को छिपे हुए फ़ील्ड के रूप में सबमिट करने के बारे में और केवल उपयोगकर्ता को अपनी सामग्री प्रिंट करना जब वे संपादन मानदंडों को पूरा नहीं करते हैं? जैसे

// user allowed change
if($user_allowed_edit)
{
    echo '<input type="checkbox" name="my_check"> Check value';
}
else
{
    // Not allowed change - submit value..
    echo '<input type="hidden" name="my_check" value="1" />';
    // .. and show user the value being submitted
    echo '<input type="checkbox" disabled readonly> Check value';
}

<input type="checkbox" onclick="return false" /> आपके लिए काम करेगा, मैं इसका उपयोग कर रहा हूं


<input name="isActive" id="isActive" type="checkbox" value="1" checked="checked" onclick="return false"/>

<input type="checkbox" onclick="this.checked=!this.checked;">

लेकिन यह सुनिश्चित करने के लिए कि सर्वर को बदला नहीं गया है, आपको सर्वर पर डेटा को बिल्कुल मान्य करना होगा।


<input type="checkbox" readonly="readonly" name="..." />

jquery के साथ:

$(':checkbox[readonly]').click(function(){
            return false;
        });

यह अभी भी कुछ दृश्य संकेत (सीएसएस, पाठ, ...) देने का एक अच्छा विचार हो सकता है, कि नियंत्रण इनपुट स्वीकार नहीं करेगा।







checkbox