Domanda

Mi chiedo se è possibile per me per congelare o disattivare l'intero modulo di aggiornamento? Ho un ingresso h: formare con una casella di controllo in esso. quando controllo degli utenti casella, desidero congelare o disattivare l'intero modulo in modo che impedirà agli utenti di cambiare ingressi.

Grazie, e sto usando JSF, Spring Web Flow, Facelets, e Trinidad.

È stato utile?

Soluzione

Se si desidera disattivare solo certi ingressi, E 'una buona idea quella di enumerarli:

function OptCheckBox(chkd) {
 if (chkd == 'y') {
  document.frm.input1.disabled = true;
  document.frm.input2.disabled = true;
 }
}

Altri suggerimenti

Si desidera utilizzare javascript per impostare tutti gli ingressi del modulo al disabilitata quando l'utente controlla la casella di controllo. Qualcosa di simile:

document.getElementById('id').disabled = true;

Si potrebbe fare questo per ogni elemento di input dove 'id' è l'ID di tale elemento.

Non è possibile disabilitare un intero modulo in una sola volta. Hai davvero bisogno di disabilitare ciascuno degli elementi di input. Ci sono fondamentalmente due modi per raggiungere questo obiettivo.

In primo modo è quello di utilizzare Javascript per inviare il modulo al server quando la casella di controllo viene fatto clic, in modo da poter utilizzare l'attributo disabled di JSF componente per disattivare gli elementi. Ecco un esempio di base:

<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>

Qui #{bean.freeze} dovrebbe puntare a una proprietà boolean.

In secondo modo è quello di scrivere una funzione Javascript per questo. Questo non richiede una forma presentare e consente di risparmiare da un HTTP ciclo di richiesta-risposta, che è meglio per l'esperienza degli utenti.

<h:form>
    <h:selectBooleanCheckbox onclick="disableForm(this)" />
    <h:inputText value="#{bean.value1}" />
    <h:inputText value="#{bean.value2}" />
    <h:inputText value="#{bean.value3}" />
</h:form>

La funzione disableForm() JS è fondamentalmente semplice. Basta passare la casella di controllo come argomento di funzione da this in modo che si può ottenere la forma del genitore da checkboxElement.form e quindi ottenere tutti gli elementi del modulo di form.elements. Hai solo bisogno di fare in modo che non si disattiva la casella di controllo stesso, in modo che si possa riattivare nuovamente il modulo:)

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;
        }
    }
}

Non c'è bisogno di conoscere l'ID di anticipo e questo rende il codice JS generici e riutilizzabili.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top