2011-12-20 16 views

Odpowiedz

10

Oto ściśle kod Visualforce próbki, które będą działać także:

<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> 

Oprócz tego, można dodać akcję we wsparciu działań, jeśli chcesz zrobić dalsze przetwarzanie w Apex, jak poniżej:

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

nadzieję, że pomoże

+0

Dzięki, myślę, że to wygląda jak to działa na mnie – user1048080

+1

Impreza actionSupport na pole wyboru powinno być onclick, onchange nie jest niezawodne we wszystkich przeglądarkach. –

+0

Często zapominam, że ludzie nadal używają IE;) Dzięki Jordy - dobry połów. – Adam

2

Możesz użyć javascript, aby przełączyć wyłączony atrybut elementu wprowadzania tekstu. Poniżej znajduje się przykładowa strona pokazująca, jak, zauważ, jest tu kilka osobliwości.

Po pierwsze, jeśli wyłączyć pole początkowo stosując disabled="true" na <apex:inputText> wtedy nawet jeśli go włączyć, wprowadzane wartości będą nie być odesłane do sterownika, a więc wyłączenie pola na obciążeniu z javascript. Wierzę, że to ma zapobiec jakiejkolwiek szansie na aktualizację wartości pola, gdy programista określi, że powinna być wyłączona.

Drugim nieparzystym punktem jest to, że nawet jeśli ustawisz element.disabled na "disabeld", aby wyłączyć element, aby sprawdzić, czy jest on wyłączony, musisz traktować go jako wartość boolowską!

<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> 

Aby to wszystko zrobić bez javascript, wyobrażam sobie, że można ustawić atrybut wyłączył <apex:inputText> „s na podstawie wartości pola checkbox, a następnie użyć tagu <apex:actionSupport> ognia działanie, gdy zmienia się pole wyboru i określić identyfikator atrybutu <apex:inputText> w atrybucie rerender. Trzeba też zawinąć go w <apex:actionRegion>, aby zapobiec wysyłaniu innych pól i powodować błędy w sprawdzaniu poprawności, jeśli wymagane pola nie są wypełnione itd. Oznacza to również, że trzeba czekać na żądanie zmiany stanu pola tekstowego, więc javascript jest najlepszą drogą do prędkości.

Powiązane problemy