Acessando o atributo desativado para o calendário PrimeFaces com JavaScript
-
25-09-2019 - |
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.
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>