Pergunta

Eu tenho um formulário em que alguns campos precisam ser desativados até que uma caixa de seleção seja clicada. Para os elementos JSF, todos estão funcionando bem. O problema é com os elementos primários.

Para um elemento JSF como uma lista suspensa, eu faço assim:

<h:selectOneMenu value="countryValue" disabled="true" id="countryId">
    <f:selectItems value="countries" />
</h:selectOneMenu>

E para os elementos primários, um calendário como este:

<p:calendar disabled="true" id="datePicker" value="dateValue" 
         pattern="yyyy-MM-dd" startWeekday="1"    
            timeZone="GMT">  
</p:calendar>

O JavaScript que usei para ativar esses elementos em um evento é simples como:

function enableLocationUpdateFilter()
{
    document.getElementById('form:datePicker').disabled = false;
}

O jQuery chamando o evento de ochange:

 jQuery('.countryCheckBoxId').change(function()
 {
    enableCountryFilter();
 });

Ao investigar o elemento PrimeFaces no Firebug, posso ver que o ID "DatePicker" atua apenas como um ID "Span" e o ID real para o HTML Inputfield é "datepicker_input". Então, em vez disso, usando o "datepicker" como um ID no JavaScript, tentei usar "datepicker_input". Isso permite o campo, mas o evento jQuery trazendo o calendário real não funciona.

Parece também que o calendário é chamado através de um evento jQuery. Neste evento jQuery, você pode ver que o padrão desativado está definido como true. E acho que esse é o problema, não posso definir essa parte como falsa.

Foi útil?

Solução 2

Como o calendário é chamado quando você pressiona o campo de texto, tentei o seguinte:

-Set a variável desativada do calendário para false.
-Fet o campo de desativação do campo de texto de entrada para o calendário para true.
-No alteração, defina o campo de texto desativado atributo para false.

Dessa forma, o atributo desativado para o calendário é sempre definido como false (o que significa que nunca está desativado) e eu só defino o campo de texto para desativar o código JavaScript na renderização. Dessa forma, você não pode acionar o calendário e a desativação só vale para o campo de texto e, em alteração, habilitando o campo de texto novamente.

Outras dicas

O melhor que consigo pensar é fazer o Ajax chamadas no servidor e render -se o calendário. Você poderia nos dizer o que está desencadeando este evento jQuery-onChange?

E suponho que você esteja usando o JSF 2.0, certo?

ATUALIZAR:

Então você quer ativar p:calendar Quando a caixa de seleção é clicada. Algo semelhante a isso deve funcionar:

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top