Salesforce 在visualforce中选中复选框后显示文本字段

Salesforce 在visualforce中选中复选框后显示文本字段,salesforce,visualforce,Salesforce,Visualforce,我有一个要求,当选中复选框时,文本字段必须是可编辑的或呈现的,如何实现这一点?您可以使用javascript切换文本输入元素的禁用属性。下面是一个示例页面,显示了这里有一些奇怪之处 首先,如果最初使用上的disabled=“true”禁用该字段,则即使启用该字段,输入的值也将而不是发送回控制器,从而禁用javascript加载的字段。我相信这是为了防止在开发人员指定应该禁用某个字段时更新该字段的值 第二个奇点是,即使您将element.disabled设置为“disabeld”以禁用某个元素,要

我有一个要求,当选中复选框时,文本字段必须是可编辑的或呈现的,如何实现这一点?

您可以使用javascript切换文本输入元素的禁用属性。下面是一个示例页面,显示了这里有一些奇怪之处

首先,如果最初使用
上的
disabled=“true”
禁用该字段,则即使启用该字段,输入的值也将而不是发送回控制器,从而禁用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>

功能切换输入(theId)
{
var e=document.getElementById(theId);
如果(e!=null)
{
e、 disabled=(e.disabled?false:“disabled”);
}
}
window.onload=function(){document.getElementById({!$Component.textInput}')。disabled=“disabled”;}

要在没有javascript的情况下完成这一切,我设想您可以根据复选框字段的值设置
的disabled属性,然后在复选框更改时使用
标记触发操作,并在
重新渲染器
属性中指定
的id。您还必须将其包装在
中,以防止发送其他字段,并在未填写必填字段时导致验证错误等。。这也意味着您必须等待更改文本字段状态的请求,因此javascript是提高速度的最佳途径。

这里有一个严格的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"/>


希望有帮助

复选框的actionSupport事件应该是onclick,onchange在所有浏览器中都不可靠。我经常忘记人们仍然使用IE;)谢谢Jordy-很好的理解。如果复选框字段不是对象字段怎么办。那我怎么做呢