अक्षम प्रपत्र जानकारी अनुरोध में दिखाई नहीं देती हैं


340

मेरे पास एक फ़ॉर्म में कुछ अक्षम इनपुट हैं और मैं उन्हें एक सर्वर पर भेजना चाहता हूं, लेकिन क्रोम उन्हें अनुरोध से बाहर कर देता है।

क्या किसी छिपे हुए क्षेत्र को जोड़े बिना इसके लिए कोई समाधान है?

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />

    <!-- this does not appear in request -->
    <input type="textbox" name="Percentage" value="100" disabled="disabled" /> 

</form>


2
@ लिआम यह बहुत ही कम गुणवत्ता वाले उत्तर के साथ कम उपस्थित प्रश्न के पक्ष में बंद करने का बहुत अजीब प्रयास है।
हज़िक

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

@ लिआम वास्तव में प्रश्न भिन्न हैं यहां तक ​​कि कुछ उत्तर समान दिखते हैं। मैं मानों को जमा करने के लिए "अक्षम" फ़ील्ड बनाने के बारे में पूछता हूं, और एक और सवाल "कारणों" के बारे में पूछता है
हज़िक

केवल कुछ घंटे बिताने के बाद मैं इसे हल करने की कोशिश कर रहा था।
एह्ह

जवाबों:


729

disabledविशेषता वाले तत्व प्रस्तुत नहीं किए जाते हैं या आप कह सकते हैं कि उनके मान पोस्ट नहीं किए गए हैं ( प्रपत्र डेटा सेट के निर्माण के लिए HTML 5 युक्ति में चरण 3 के तहत दूसरा बुलेट बिंदु देखें )।

अर्थात,

<input type="textbox" name="Percentage" value="100" disabled="disabled" /> 

FYI करें, HTML 4 कल्पना में प्रति 17.12.1 :

  1. अक्षम नियंत्रण पर ध्यान केंद्रित नहीं किया जाता है।
  2. टैबिंग नेविगेशन में अक्षम नियंत्रणों को छोड़ दिया गया है।
  3. अक्षम नियंत्रणों को सफलतापूर्वक पोस्ट नहीं किया जा सकता है।

आप readonlyअपने मामले में विशेषता का उपयोग कर सकते हैं , ऐसा करने से आप अपने क्षेत्र का डेटा पोस्ट कर पाएंगे।

अर्थात,

<input type="textbox" name="Percentage" value="100" readonly="readonly" />

FYI करें, HTML 4 युक्ति में प्रति 17.12.2 :

  1. रीड-ओनली एलिमेंट फोकस प्राप्त करते हैं लेकिन उपयोगकर्ता द्वारा संशोधित नहीं किया जा सकता है।
  2. रीडिंग नेविगेशन में केवल-तत्व शामिल हैं।
  3. केवल-पढ़ने के लिए तत्व सफलतापूर्वक पोस्ट किए गए हैं।

8
मेरे स्वयं के प्रश्न का उत्तर देने के लिए: नहीं, रीडोनी केवल <input /> फॉर्म नियंत्रण के प्रकार = 'टेक्स्ट' और टाइप = 'पासवर्ड' के लिए और <textarea /> के लिए काम करता है। क्या आसानी से करता है उपयोगकर्ता नियंत्रण मूल्य को बदलने से रोक रहा है। चेकबॉक्स (या टाइप रेडियो के इनपुट) के बदलते मूल्य से उपयोगकर्ता को रोकना बहुत मायने नहीं रखता ...
Muleskinner

3
@ danielson317 आप चुनिंदा तत्व को "अक्षम" रख सकते हैं, लेकिन उसी मूल्य के साथ एक और छिपा इनपुट भी जोड़ सकते हैं।
अल्फामेले

1
@AlphaMale लेकिन छिपे हुए तत्व का एक ही नाम (या नहीं होना चाहिए) नहीं हो सकता है। तत्व के खाली होने और मूल रूप को सहेजे गए प्रपत्र स्थिति से केवल पुल करने की अनुमति देकर मैंने इसे पा लिया। यह सिर्फ ध्यान देने योग्य है चुनिंदा फॉर्म आइटम पर आसानी से काम नहीं करता है।
danielson317

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

1
धन्यवाद, यह मददगार था और जवाब और प्रतिक्रिया दोनों।
user1449249

25

Jquery का उपयोग करना और अजाक्स के साथ डेटा भेजना, आप अपनी समस्या को हल कर सकते हैं:

<script>

$('#form_id').submit(function() {
    $("#input_disabled_id").prop('disabled', false);

    //Rest of code
    })
</script>

+1 इस समाधान के बारे में अच्छी बात यह है कि आप अभी भी लाल निष्क्रिय आइकन का उपयोग कर सकते हैं जब उपयोगकर्ता इनपुट पर =)
JMASTER B

5
@ArielMaduro आप कर सकते हैं कि सीएसएस के साथcursor:not-allowed;
sricks

@sricks ओह सच में ?? क्या आप एक उदाहरण प्रदान कर सकते हैं?
JMASTER B

इस समाधान को अधिक आसानी से उपयोग करने से अधिक पसंद है, क्योंकि अक्षम फ़ील्ड फोकस प्राप्त नहीं कर सकते हैं
एंड्रियास

9

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

<form onsubmit="this.querySelectorAll('input').forEach(i => i.disabled = false)">
    <!-- Re-enable all input elements on submit so they are all posted, 
         even if currently disabled. -->

    <!-- form content with input elements -->
</form>

यदि आप jQuery पसंद करते हैं:

<form onsubmit="$(this).find('input').prop('disabled', false)">
    <!-- Re-enable all input elements on submit so they are all posted, 
         even if currently disabled. -->

    <!-- form content with input elements -->
</form>

ASP.NET MVC C # रेज़र के लिए, आप इस तरह सबमिट हैंडलर जोड़ें:

using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post,
    // Re-enable all input elements on submit so they are all posted, even if currently disabled.
    new { onsubmit = "this.querySelectorAll('input').forEach(i => i.disabled = false)" } ))
{
    <!-- form content with input elements -->
}

jquery विकल्प पर उद्धरणों की एक याद आ रही है
cagcak

8

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


1
यह समाधान वह है जो Ive का भी उपयोग कर रहा है - लेकिन जैसा कि मैंने अभी सीखा - पठनीय संपत्ति एक बेहतर समाधान है
Muleskinner

4

मैं इस उत्तर को अपडेट कर रहा हूं क्योंकि यह बहुत उपयोगी है। बस इनपुट में आसानी से जोड़ें।

तो फार्म होगा:

<form action="/Media/Add">
    <input type="hidden" name="Id" value="123" />
    <input type="textbox" name="Percentage" value="100" readonly/>
</form>

4

शब्दार्थ यह सही व्यवहार की तरह लगता है

मैं अपने आप से पूछ रहा हूँ " मुझे इस मूल्य को जमा करने की आवश्यकता क्यों है? "

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

अक्षम इनपुट में प्रदर्शित किया गया कोई भी मान होना चाहिए

  1. प्रपत्र का उत्पादन करने वाले सर्वर पर एक मूल्य से आउटपुट, या
  2. यदि फॉर्म डायनामिक है, तो फॉर्म में मौजूद अन्य इनपुट से गणना योग्य बनें

यह मानते हुए कि प्रपत्र को संसाधित करने वाला सर्वर उसी तरह से काम कर रहा है जैसा कि सर्वर, सेवा प्रदान करने के लिए अक्षम इनपुट के मूल्यों को पुन: पेश करने के लिए सभी जानकारी उपलब्ध होनी चाहिए।

वास्तव में, डेटा अखंडता को बनाए रखने के लिए - भले ही अक्षम इनपुट का मूल्य प्रसंस्करण सर्वर को भेजा गया था, आपको वास्तव में इसे मान्य करना चाहिए। इस मान्यता के लिए समान स्तर की जानकारी की आवश्यकता होगी क्योंकि आपको मूल्यों को फिर से तैयार करने की आवश्यकता होगी!

मैं लगभग तर्क देता हूं कि केवल-पढ़ने के लिए इनपुट अनुरोध में नहीं भेजे जाने चाहिए

सही होने की खुशी, लेकिन सभी उपयोग के मामले मैं सोच सकता हूं कि जहां केवल पढ़ने योग्य / अक्षम इनपुट प्रस्तुत करने की आवश्यकता है, वे वास्तव में भटकाव में सिर्फ स्टाइलिंग मुद्दे हैं


1
यह मत भूलो कि यह मूल्य सीधे क्रोम डेवलपर टूल के साथ जोड़-तोड़ किया जा सकता है
jimjim

2

मुझे यह काम आसान लगता है। आसानी से इनपुट क्षेत्र है, तो यह शैली तो अंत उपयोगकर्ता जानता है कि यह केवल पढ़ा है। यहां दिए गए इनपुट (उदाहरण के लिए AJAX से) अतिरिक्त कोड के बिना भी जमा कर सकते हैं।

<input readonly style="color: Grey; opacity: 1; ">

-6

आप पूरी तरह से अक्षम करने से बच सकते हैं, यह दर्दनाक है क्योंकि HTML फॉर्मेट फॉर्मेट <p>या किसी अन्य लेबल से संबंधित कुछ भी नहीं भेजेगा ।

तो आप इसके बजाय नियमित रख सकते हैं

<input text tag just before you have `/>

इसे जोड़ो readonly="readonly"

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

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