इनपुट फ़ील्ड भेजने से कैसे बचें जो प्रदर्शन द्वारा छिपी हैं: सर्वर से कोई भी नहीं?


88

कल्पना कीजिए कि आपके पास एक ऐसा रूप है जहाँ आप कई क्षेत्रों की दृश्यता को बदलते हैं। और यदि क्षेत्र प्रदर्शित नहीं होता है, तो आप नहीं चाहते कि उसका मूल्य अनुरोध में हो।

आप इस स्थिति को कैसे संभालेंगे?

जवाबों:


128

अक्षम करने के लिए एक फार्म तत्व सेट करना सर्वर पर जाना बंद कर देगा, जैसे:

<input disabled="disabled" type="text" name="test"/>

जावास्क्रिप्ट में इसका मतलब कुछ इस तरह होगा:

var inputs = document.getElementsByTagName('input');
for(var i = 0;i < inputs.length; i++) {
    if(inputs[i].style.display == 'none') {
        inputs[i].disabled = true;
    }
}
document.forms[0].submit();

JQuery में:

   $('form > input:hidden').attr("disabled",true);
   $('form').submit();

16
JQuery के छद्म चयनकर्ता के :inputबजाय inputआप भी आसानी से सभी selectऔर textareaतत्वों को निष्क्रिय कर सकते हैं
डैनियल रिकोस्की

8
JQuery में = = 1.6, attr("disabled", true)आप के बजाय prop("disabled", true) api.jquery.com/prop
yorch

2
@ dominicbri7 - jQuery 1.6 के रूप में, अक्षम और चेक किए गए गुणों को प्राप्त करने और सेट करने के लिए उपयोग .prop()करने के बजाय .attr()अनुशंसित है। .attr()कुछ मामलों में वसीयत की जाँच करना और उसका उपयोग करना अवांछित परिणाम लौटाएगा। कृपया इस बात पर टिप्पणी करने से पहले jQuery के दस्तावेज़ पढ़ें कि क्या यॉर्च का जिक्र था।
zgr024

@ zgr024 ठीक है, मेरी टिप्पणी को हटा दिया
अधिवास 7

2
@DanielRikowski, इस jQuery के साथ यहाँ क्या jQuery है बकवास है। बात करते हैं वैनिला जेएस की।
पचेरियर

13

आप अक्षम विशेषता को सेट करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं। 'सबमिट' बटन क्लिक इवेंट संभवतः ऐसा करने के लिए सबसे अच्छी जगह है।

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


7

यदि आप छिपे हुए मूल तत्व के भीतर सभी तत्वों या कुछ तत्वों को अक्षम करना चाहते हैं, तो आप उपयोग कर सकते हैं

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");

यह उदाहरण http://jsfiddle.net/gKsTS/ एक छिपे हुए div के भीतर सभी टेक्स्टबॉक्स को अक्षम करता है


यह एक बहुत अच्छा समाधान है क्योंकि छिपे हुए div के माध्यम से पुनरावृत्त होता है और सभी को निष्क्रिय करता है। इसे और अधिक +1 होना चाहिए
येपई

6

व्हाट अबाउट:

$('#divID').children(":input").prop("disabled", true); // disable

तथा

$('#divID').children(":input").prop("disabled", false); // enable

एक छिपे हुए div के अंदर सभी बच्चों के इनपुट (चयन, चेकबॉक्स, इनपुट, टेक्सारैस आदि) को टॉगल करने के लिए।


यदि आप सभी इनपुट को हथियाना चाहते हैं तो यह एक शानदार उपाय है। अच्छा काम
२३:५३ पर

3

एक बहुत ही सरल (लेकिन हमेशा सबसे सुविधाजनक नहीं) समाधान "नाम" विशेषता को हटाने के लिए है - मानक के लिए आवश्यक है कि ब्राउज़र अनाम मान न भेजें, और मेरे द्वारा ज्ञात सभी ब्राउज़र इस नियम का पालन करते हैं।


4
अनुशंसित नहीं है क्योंकि यदि आप जावास्क्रिप्ट के माध्यम से राज्यों को बदलते हैं तो आप सभी नाम विशेषताओं को कैशिंग किए बिना इनपुट को रीसेट कर सकते हैं। अक्षम अवस्था को स्विच करना आसान है।
साइमन

1

मैं या तो इनपुट से वैल्यू को हटा दूंगा या DOM से इनपुट ऑब्जेक्ट को अलग कर दूंगा इसलिए यह पहली जगह पर पोस्ट होने के लिए मौजूद नहीं है।

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