2013-03-26 11 views
16

मैं कुछ स्थितियों के आधार पर HTML फॉर्म तत्वों का एक अनुभाग अक्षम करना चाहता हूं। ऐसा करने का आदर्श तरीका यह है:क्या फ़ॉर्म तत्वों का एक गुच्छा एक बार में अक्षम करने का कोई तरीका है?

<fieldset disabled> 
    <input value="one" /> 
    <input value="two" /> 
</fieldset> 

अब, उन दो इनपुट अक्षम हैं। हालांकि, यह IE8 पर पूरी तरह से borked लगता है। इनपुट अक्षम दिखाई देते हैं लेकिन मैं अभी भी उनमें टाइप कर सकता हूं।

Fiddle (नहीं के रूप में JsFiddle वास्तव में IE8 में काम करता है)

इस समस्या के लिए एक क्रॉस-ब्राउज़र समाधान है हर रूप तत्व (जो मेरी स्क्रिप्ट को मुश्किल होगा) को विकलांग जोड़े बिना ही। मैं शायद jQuery में <fieldset> का चयन करने की तरह कुछ मुश्किल कर सकता हूं, फिर .each() सभी फॉर्म तत्वों के माध्यम से और उन्हें अक्षम कर सकता हूं - हालांकि, मैं वास्तव में disabled विशेषता को नॉकआउट बाध्यकारी का उपयोग कर रहा हूं, इसलिए वास्तव में ऐसे कोड को जोड़ने के लिए कोई जगह नहीं है। मेरा आखिरी उपाय एक कस्टम नॉकआउट बाइंडिंग का उपयोग करना है जो सभी बच्चों को भी अक्षम करता है, लेकिन ले श्वास।

+1

आप इनपुट पर क्लिक रोकने के लिए ओवरले का उपयोग कर सकते हैं, लेकिन इससे उन्हें टैबबिंग को रोका नहीं जा सकता है, इसलिए आप टैबिडेक्स विशेषता के साथ एक ही नाव में होंगे। आप एक ऐसी घटना को बांध सकते हैं जो कि कुंजीपटल होने से रोकती है, या उस मामले के लिए फोकस ईवेंट भी रोकती है। –

+0

हाँ, मैं उस समाधान में * बेहद * नहीं हूं। इसके अलावा, इसे नॉकआउट टेम्पलेट में एकीकृत करना अभी भी एक परेशानी है। मैं बस अलग-अलग तत्वों को अलग-अलग अक्षम कर दूंगा। –

+0

@ माइक क्रिस्टेनसेन: 'फ़ील्डसेट 'IE8 में' बोर्कड 'नहीं है। यह सिर्फ पूरी तरह से समर्थित नहीं है। 'फ़ील्डसेट' एक HTML5 जोड़ है और आईई 8 बहुत कम एचटीएमएल 5 फॉर्म तत्वों का समर्थन करता है। आईई 8 ** के लिए [** http: //html5test.com परिणाम देखें] [http://html5test.com/compare/browser/ie08.html) 'फ़ील्डसेट' केवल आईई 8 में आंशिक रूप से समर्थित है। जैसा कि परिणाम 'तत्व विशेषताओं' में देखा गया है समर्थित नहीं हैं। तो आपको एक विकल्प के साथ आने की संभावना है। सुझाए गए एक ओवरले विकल्पों में से एक हो सकता है। हालांकि एक पॉलीफिल हो सकता है जो आईई 8 में फ़ील्ड पर काम करेगा। हालांकि इसके बारे में 100% निश्चित नहीं है। – Nope

उत्तर

4

संक्षेप में: नहीं। इसका कारण यह है कि आईई 8 और disabled में समर्थन की कमी fieldset तत्व पर विशेषता है।

Source

IE7 और IE8 में, विशेषता केवल < कथा में फार्म तत्वों> अक्षम करता है।

मुझे डर है कि आपको अन्य उपयोगकर्ताओं/अपने स्वयं के कस्टम बाइंडिंग के उत्तरों जैसे कस्टम समाधान की तलाश करनी चाहिए।

+0

+1। मैं [** http: //html5test.com/compare/browser/ie08.html**] (http://html5test.com/compare/browser/ie08.html) देख रहा था और वहां 'अक्षम' कहा गया है विशेषता 'समर्थित थी, हालांकि 'तत्व विशेषताएँ' नहीं थीं। बहुत ज्यादा उलझन। मैं आपके उस लिंक का नोट रखूंगा। – Nope

2

jQuery का उपयोग कर समाधान:

var disabledFiedset=$('fieldset[disabled]'); 
$('input',disabledFiedset).attr('disabled','disabled'); 
+1

'+ 1' क्योंकि मैंने आपके समाधान का हिस्सा उपयोग किया था। –

1

मैं कुछ इसी तरह से संपादन योग्य और फिर मेरी इनपुट में मैं इस्तेमाल किया कहा जाता है अपने मॉडल में एक नमूदार का उपयोग कर ऐसा करने में सक्षम था एक data-bind="enable: editable” और इस पूरी तरह से आईई 7, 8 और 9 में काम करता है

+0

निश्चित रूप से, लेकिन आपको इसे हर फॉर्म फ़ील्ड पर रखना होगा। –

+0

हां लेकिन यह सब एक पर्यवेक्षित द्वारा नियंत्रित है। स्रोत के लिए – segFault

10

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

ko.bindingHandlers.allowEdit = { 
    init: function(element, valueAccessor) 
    { 
     if(!valueAccessor()) 
     { 
     element.disabled = true; 
     element.readOnly = true; 

     if(element.tagName === 'FIELDSET') 
     { 
      $(':input', element).attr('disabled', 'disabled'); 
     } 
     } 
    } 
}; 

ध्यान दें, आप update विधि भी अगर आप इस बंधन को बदलने की अनुमति चाहता था को लागू करना चाहते हैं:

पहले, मैं एक नॉकआउट बाध्यकारी बनाया। मेरे पास यह आवश्यकता नहीं थी।

तो आप इस तरह के रूप में बाध्यकारी इस्तेमाल कर सकते हैं:

<fieldset data-bind="allowEdit: someExpression"> 
    <input value="One" /> 
    <input value="Two" /> 
</fieldset> 
+0

'$ ('फ़ील्डसेट: इनपुट')। Attr ('अक्षम', ''); 'और' $ (' फ़ील्डसेट: इनपुट ')। RemoveAttr (' अक्षम '); 'textarea शामिल है और चुनें। आपको उन्हें अलग से निर्दिष्ट करने की आवश्यकता नहीं हो सकती है: http://jsfiddle.net/CvafW/1/ यह सुनिश्चित नहीं है कि यह सभी ब्राउज़रों में समान है या नहीं। – Nope

+0

@ FrançoisWahl - हाँ, ठीक है आप उस पर हैं .. मेरा कोड अपडेट कर रहा है। –

+0

ओह और ऑफ कोर्स +1, यह देखते हुए कि यह एक ऐसा समाधान है जो आपके लिए काम करता प्रतीत होता है लेकिन भविष्य में उपयोगकर्ताओं को 'नॉकआउटजेएस' का उपयोग करके समान मुद्दों के साथ लड़ने के लिए भी अधिक उपयोगी होगा। – Nope

0

अपने fieldset टैग करने के लिए आईडी दें (या यू भी jQuery कोड में सीधे टैग नाम का उपयोग कर सकते हैं) सभी क्षेत्रों को निष्क्रिय करने के लिए कोड निम्नलिखित & उपयोग jquery का उपयोग कर उस फ़ील्ड में।

$ ("# फ़ील्ड आईडी" या "फ़ील्डसेट")। बच्चे()।attr ("अक्षम", "अक्षम");

संबंधित मुद्दे

 संबंधित मुद्दे