2011-12-20 2 views

ответ

10

Вот строго Visualforce пример кода, который будет работать, а также:

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

В дополнение к этому, вы можете добавить действие в поддержку действий, если вы хотите, чтобы сделать дальнейшую обработку в Apex, как это:

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

Надежда, что помогает

+0

Спасибо, я думаю, что это выглядит, как это работает для меня – user1048080

+1

события actionSupport для флажка должен быть OnClick, OnChange не надежный во всех браузерах. –

+0

Я часто забываю, что люди все еще используют IE;) Спасибо, Джорди - хороший улов. – Adam

2

Вы можете использовать javascript для переключения отключенного атрибута элемента ввода текста. Ниже приведен пример страницы, показывающей, как, обратите внимание, здесь есть несколько странностей.

Во-первых, если отключить поле первоначально используя disabled="true" на <apex:inputText> тогда, даже если вы включите его, значения, введенные будет не быть отправлены обратно в контроллер, следовательно, отключение поля на нагрузке с помощью JavaScript. Я считаю, что это должно предотвратить любую возможность обновления значения поля, когда разработчик указал, что он должен быть отключен.

Вторая особенность заключается в том, что даже если вы установили element.disabled в «disabeld», чтобы отключить элемент, чтобы проверить, отключено ли оно, вы должны рассматривать его как логическое значение!

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

Чтобы сделать все это без JavaScript, я полагаю, вы бы установить инвалидов атрибут <apex:inputText> «s на основе значения поля CheckBox, а затем использовать тег <apex:actionSupport> огонь действие при изменении флажок и укажите идентификатор <apex:inputText> в атрибуте rerender. Вам также придется обернуть его в <apex:actionRegion>, чтобы предотвратить отправку других полей и вызывать ошибки проверки, если требуемые поля не заполняются и т. Д. Это также означает, что вам нужно ждать запроса на изменение состояния текстового поля, поэтому javascript - лучший маршрут для скорости.

Смежные вопросы