2011-12-20 2 views
7

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

उत्तर

10

यहाँ एक सख्ती से Visualforce कोड नमूना है कि रूप में अच्छी तरह काम करता रहेगा:

<apex:actionSupport event="onchange" action="{!myMethod}" rerender="theBlock"/> 

आशा में मदद करता है कि

+0

धन्यवाद, मैं इस लगता है कि यह मेरे लिए काम करता है – user1048080

+1

एक चेकबॉक्स के लिए actionSupport घटना onclick होना चाहिए लगता है, onchange नहीं है सभी ब्राउज़रों में भरोसेमंद। –

+0

मैं अक्सर भूल जाता हूं कि लोग अभी भी आईई का उपयोग करते हैं;) धन्यवाद जॉर्डी - अच्छी पकड़। – Adam

2

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

सबसे पहले, आप शुरू में <apex:inputText> तो भले ही आप इसे सक्षम, मूल्यों में प्रवेश किया पर disabled="true" का उपयोग कर नहीं इसलिए जावास्क्रिप्ट के साथ लोड पर क्षेत्र को निष्क्रिय करने के लिए वापस नियंत्रक को भेज दिया जाएगा, क्षेत्र को निष्क्रिय करता है, तो। मेरा मानना ​​है कि यह क्षेत्र के मूल्य को अद्यतन करने के किसी भी मौके को रोकने के लिए है जब डेवलपर ने निर्दिष्ट किया है कि इसे अक्षम किया जाना चाहिए।

दूसरा विषम बिंदु यह है कि भले ही आप element.disabled को किसी तत्व को अक्षम करने के लिए "अक्षम" करने के लिए सेट करते हैं, यह जांचने के लिए कि यह अक्षम है या नहीं, आपको इसे बूलियन मान के रूप में देखना होगा!

<apex:page standardController="Contact"> 
    <apex:form > 
     <script type="text/javascript"> 
      function ToggleInput(theId) 
      { 
       var e = document.getElementById(theId); 

       if(e != null) 
       { 
        e.disabled = (e.disabled ? false : "disabled"); 
       } 
      } 

      window.onload = function() { document.getElementById('{!$Component.textInput}').disabled = "disabled"; } 

     </script> 
     <apex:inputCheckbox onchange="ToggleInput('{!$Component.textInput}');" value="{!Contact.Some_Checkbox__c}"/> 
     <apex:inputText id="textInput" value="{!Contact.Some_Text_Field__c}"/> 
     <apex:commandButton action="{!Save}" value="Update"/> 
    </apex:form> 
</apex:page> 

जावास्क्रिप्ट के बिना यह सब करने के लिए, मुझे लगता है आप चेकबॉक्स क्षेत्र के मूल्य के आधार <apex:inputText> के विकलांग विशेषता सेट करते हैं, तो एक कार्रवाई आग एक <apex:actionSupport> टैग का उपयोग जब चेकबॉक्स परिवर्तन और निर्दिष्ट rerender विशेषता में <apex:inputText> की आईडी। अन्य क्षेत्रों को भेजे जाने से रोकने के लिए आपको <apex:actionRegion> में इसे लपेटना होगा और आवश्यक फ़ील्ड भरने पर सत्यापन त्रुटियां उत्पन्न करनी होंगी .. इसका मतलब यह भी है कि आपको टेक्स्ट फ़ील्ड की स्थिति बदलने के अनुरोध की प्रतीक्षा करनी है, इसलिए जावास्क्रिप्ट गति के लिए सबसे अच्छा मार्ग है।

<apex:pageBlock id="theBlock"> 
    <apex:inputCheckbox value="{!theSObject.CheckBox__c}"> 
     <apex:actionSupport event="onchange" rerender="theBlock"/> 
    </apex:inputCheckbox> 

    <apex:inputText value="{!theSObject.TextField__c}" disabled="false" rendered="{!(theSObject.CheckBox__c == true)}"/> 
    <apex:inputText value="{!theSObject.TextField__c}" disabled="true" rendered="{!(theSObject.CheckBox__c != true)}"/> 

    <!-- Or to simply have a field that appears only when the box is checked --> 
    <apex:inputText value="{!theSObject.TextField__c}" rendered="{!(theSObject.CheckBox__c == true)}"/> 
</apex:pageBlock> 

इस के अलावा, आप एक कार्रवाई कार्रवाई समर्थन में अगर आप इस तरह एपेक्स में आगे की प्रक्रिया करने के लिए, इच्छा जोड़ सकते हैं: