Como congelar ou desativar um formulário de entrada de atualização
-
21-09-2019 - |
Pergunta
Gostaria de saber se é possível congelar ou desativar todo o formulário de atualização? Eu tenho um formulário de entrada: formulário com uma caixa de seleção. Quando os usuários verificam a caixa, eu gostaria de congelar ou desativar todo o formulário para que os usuários desocupem a alteração de entradas.
Obrigado, e estou usando JSF, Spring Web Flow, Facelets e Trinidad.
Solução
Se você deseja desativar apenas certas entradas, é uma boa ideia enumerá -las:
function OptCheckBox(chkd) {
if (chkd == 'y') {
document.frm.input1.disabled = true;
document.frm.input2.disabled = true;
}
}
Outras dicas
Você deseja usar o JavaScript para definir todas as entradas do formulário para desativar quando o usuário verificar a caixa de seleção. Algo como:
document.getElementById('id').disabled = true;
Você faria isso para cada elemento de entrada em que 'ID' é o ID desse elemento.
Você não pode desativar um formulário inteiro de uma só vez. Você realmente precisa desativar cada um dos elementos de entrada. Existem basicamente duas maneiras de conseguir isso.
A primeira maneira é usar o JavaScript para enviar o formulário ao servidor quando a caixa de seleção for clicada, para que você possa usar o JSF Component's disabled
atribuir para desativar os elementos. Aqui está um exemplo básico:
<h:form>
<h:selectBooleanCheckbox value="#{bean.freeze}" onclick="submit()" />
<h:inputText value="#{bean.value1}" disabled="#{bean.freeze}" />
<h:inputText value="#{bean.value2}" disabled="#{bean.freeze}" />
<h:inputText value="#{bean.value3}" disabled="#{bean.freeze}" />
</h:form>
Aqui #{bean.freeze}
deve apontar para um boolean
propriedade.
A segunda maneira é escrever uma função JavaScript para isso. Isso não requer um formulário enviar e salva você de um ciclo de resposta a solicitações HTTP, o que é melhor para a experiência do usuário.
<h:form>
<h:selectBooleanCheckbox onclick="disableForm(this)" />
<h:inputText value="#{bean.value1}" />
<h:inputText value="#{bean.value2}" />
<h:inputText value="#{bean.value3}" />
</h:form>
A função JS disableForm()
é basicamente simples. Basta passar na caixa de seleção como argumento da função por this
para que você possa obter o formulário pai por checkboxElement.form
e então obtenha todos os elementos de formulário por form.elements
. Você só precisa garantir que não desative a própria caixa de seleção, para que possa reativar o formulário novamente :)
function disableForm(checkboxElement) {
var elements = checkboxElement.form.elements;
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
if (element != checkboxElement) {
element.disabled = checkbox.checked;
}
}
}
Não há necessidade de saber o ID de antemão e isso torna o código JS genérico e reutilizável.
Espero que isto ajude.