2011-12-20 39 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:actionSupport event="onchange" action="{!myMethod}" rerender="theBlock"/> 

希望幫助

+0

謝謝,我覺得這看起來像我的作品 – user1048080

+1

的複選框的ActionSupport的事件應該是的onclick,平變化不所有瀏覽器都可靠。 –

+0

我經常忘記人們仍在使用IE;)謝謝Jordy--很好的接收。 – 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>的disabled屬性,然後使用<apex:actionSupport>代碼觸發一個動作時複選框的變化,並指定rerender屬性中的<apex:inputText>的ID。您還必須將其包裝在<apex:actionRegion>中,以防止發送其他字段並在未填寫必填字段時導致驗證錯誤等。這也意味着您必須等待請求才能更改文本字段的狀態,所以JavaScript是速度的最佳途徑。

相關問題