Accesso attributo disabled per primefaces Calendario con JavaScript
-
25-09-2019 - |
Domanda
Ho una forma in cui deve essere disabilitato fino a quando una casella di controllo viene fatto clic su alcuni campi. Per JSF-elementi sono tutti bene di lavoro. Il problema è con gli elementi primefaces.
Per un JSF-elemento come un elenco a discesa lo faccio in questo modo:
<h:selectOneMenu value="countryValue" disabled="true" id="countryId">
<f:selectItems value="countries" />
</h:selectOneMenu>
E per primefaces-elementi, un calendario come questo:
<p:calendar disabled="true" id="datePicker" value="dateValue"
pattern="yyyy-MM-dd" startWeekday="1"
timeZone="GMT">
</p:calendar>
Il codice JavaScript che ho usato per abilitare questi elementi su un evento è semplice come:
function enableLocationUpdateFilter()
{
document.getElementById('form:datePicker').disabled = false;
}
Il jQuery chiamando l'onchange-evento:
jQuery('.countryCheckBoxId').change(function()
{
enableCountryFilter();
});
Per indagare l'elemento primefaces in Firebug posso vedere che l'id "Datepicker" agisce solo come un id "span" e l'id effettivo per l'inputfield HTML è "datePicker_input". Così, invece utilizzando "datepicker" come ID in JavaScript Ho provato ad utilizzare "datePicker_input". In questo modo il campo, ma l'evento jQuery fanalino di calendario reale non funziona.
Sembra anche che il calendario si chiama attraverso un jquery-evento. In questo jquery-evento si poteva vedere che il default disabilitata è impostata su true. E penso che è il problema, non posso set che parte su false.
Soluzione 2
Dato che il calendario viene chiamato quando si preme il campo di testo ho provato il seguente:
-Imposta il calendario disabile variabili su false.
-Impostare l'attributo disabled campo di inserimento testo per il calendario su true.
-on cambiamento, impostare l'attributo disabled campo di testo su false.
In questo modo, l'attributo disabilitato per il Calendario è sempre impostato su false (il che significa che non è mai disattivato) e ho solo impostare il campo di testo per portatori di handicap in codice JavaScript sul rendering. In questo modo non si può innescare il calendario e la disabilitazione va solo per il campo di testo e il cambiamento che ho consentendo ancora una volta il campo di testo.
Altri suggerimenti
Il meglio che posso pensare è quello di rendere l'Ajax chiamate sul server, e rerender il calendario. Puoi dirci cosa sta provocando questo evento jQuery-onchange?
E presumo che si sta utilizzando JSF 2.0, giusto?
UPDATE:
Così si vuole abilitare p:calendar
quando checkBox viene cliccato. Qualcosa di simile a questo dovrebbe funzionare:
<h:selectBooleanCheckbox id="countryCheckBoxId" value="#{bean.countryBoolean}">
<f:ajax render="datePicker"/>
</h:selectBooleanCheckbox>
<p:calendar disabled="#{!bean.countryBoolean}" id="datePicker" value="dateValue"
pattern="yyyy-MM-dd" startWeekday="1" timeZone="GMT">
</p:calendar>