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.

È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top