Mam wymóg, aby pole tekstowe wymagało edycji lub renderowania po zaznaczeniu pola wyboru, w jaki sposób mogę to zrobić?Wyświetl pole tekstowe po zaznaczeniu pola wyboru w obiekcie wizualnym
Odpowiedz
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
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.
Dzięki, myślę, że to wygląda jak to działa na mnie – user1048080
Impreza actionSupport na pole wyboru powinno być onclick, onchange nie jest niezawodne we wszystkich przeglądarkach. –
Często zapominam, że ludzie nadal używają IE;) Dzięki Jordy - dobry połów. – Adam