Pregunta

Me pregunto si es posible que me congelo o desactivar todo el formulario de actualización? Tengo una entrada h: formar con una casilla de verificación en ella. cuando los usuarios comprobar la caja, me gustaría congelar o desactivar todo el formulario por lo que no permiten que los usuarios cambien entradas.

Gracias, y estoy usando JSF, Spring Web Flow, Facelets, y Trinidad.

¿Fue útil?

Solución

Si desea desactivar sólo ciertas entradas, Es una buena idea para enumerarlos:

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

Otros consejos

Se podría querer usar javascript para establecer todas las entradas de formulario que desactiva cuando el usuario selecciona la casilla de verificación. Algo así como:

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

Se podría hacer esto para cada elemento de entrada, donde 'id' es la identificación de ese elemento.

No se puede desactivar una forma completa de una vez. Que realmente necesita para desactivar cada uno de los elementos de entrada. Hay básicamente dos maneras de lograr esto.

En primer forma es utilizar Javascript para enviar el formulario al servidor cuando se hace clic en la casilla de verificación, por lo que puede utilizar el atributo disabled de JSF componente para desactivar los elementos. Aquí hay un ejemplo 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>

Aquí #{bean.freeze} debe apuntar a una propiedad boolean.

La segunda manera es escribir una función Javascript para esto. Esto no requiere un formulario enviado y salva de ciclo de petición-respuesta de una HTTP, que es mejor para la experiencia del usuario.

<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 función disableForm() JS es básicamente simple. Sólo tiene que pasar en la casilla de verificación como argumento de la función por this de manera que se puede obtener el formulario principal por checkboxElement.form y luego obtener todos los elementos de formulario por form.elements. Sólo tiene que asegurarse de que no desactivar la casilla de verificación en sí, por lo que podría volver a habilitar el formulario de nuevo:)

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

No hay necesidad de conocer el ID de antemano y esto hace que el código JS genérico y reutilizable.

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top