2010-09-24 19 views
13

Me gustaría tener un grupo de texto HTML <input> que pueden estar atenuados (inhabilitados) al mismo tiempo. También quiero que todo el área en la que se encuentren esté atenuada o al menos visiblemente deshabilitada. He visto cosas como esta en aplicaciones de escritorio.¿Cómo hacer un formulario HTML en gris?

¿Alguna idea sobre una forma fácil/elegante de hacerlo? Estoy tratando de evitar establecer manualmente cada uno en disabled="disabled", y también tengo un área que rodea el <input> que indica que toda la porción del formulario no es editable.

EDIT: Lo siento, debo mencionar unas cuantas cosas más ...

  1. Todo es local. No estoy usando PHP o ASP ni nada de eso ... solo HTML, JavaScript y CSS. ¡También no jquery!
  2. Deseo activar/desactivar la "zona" de forma dinámica con JavaScript
  3. ¡No es una <form>, sólo un montón de <input> 's
+0

¿Quieres que el '' elementos deshabilitados con HTML estático o desactivarse de forma dinámica con javascript o algo? Exploré formas dinámicas hasta cierto punto en [esta pregunta] (http://stackoverflow.com/questions/3398603/how-to-create-a-dynamic-form-using-jquery/3408517#3408517); incluso creó un [jQuery plugin] (http://github.com/macek/jquery-input-depends-on) para él. –

Respuesta

18

El parámetro disabled = "disabled" es la manera estándar de hacerlo, y podría usar algo como jQuery para deshabilitar dinámicamente todos los elementos de formulario contenidos en un fieldset (que es la forma estándar de agrupar elementos de formulario relacionados) sobre la marcha.

Alternativamente, podría colocar un div parcialmente transparente en la parte superior del fieldset. Esto también proporcionará cierto bloqueo de los elementos del formulario a partir de los clics del mouse, pero no protegerá contra las pestañas hacia ellos. Aún debe desactivar los elementos del formulario.

+1

Intenté deshabilitar todas las entradas en el envío. Esto pareció causar problemas con MVC3. No publicaría el modelo correctamente cuando desactivara todo en el formulario. – user1003221

+1

de forma predeterminada, los elementos HTML deshabilitados no propagan sus valores a la solicitud de publicación. Use solo readonly si no se desea – Filip

0

Puede desplazarse por todos los elementos del formulario y desactivarlos. No probado, pero intentar algo como esto:

for (x=0; x<document.YOURFORM.elements.length; x++) { 
    document.YOURFORM.elements[x].disabled=true; 
} 
8
for(i=0; i<document.FormName.elements.length; i++) { 
    document.FormName.elements[i].disabled=true; 
} 
document.getElementById("surroundingarea").style.backgroundColor = "#CCCCCC"; 

bucles a través de los elementos del formulario con el nombre FormName y desactivar cada elemento .. a continuación, cambiar el color de fondo del elemento que rodea

2

Puede basta con utilizar jQuery para desactivar todas las formas elementos en esa zona, como:


    //assuming that area is a div element with id lets say disabled-area 
    $(document).ready(function(){ 
    $("#disabled-area input").attr("disabled", "disabled"); 
    }); 

yo no la salida, así que espero que esto funcionará :)

+0

Este código está funcionando. – Samarland

2

Si dices que no quieres jugar con la propiedad "disabled", también puedes colocar un DIV transparente sobre el formulario HTML, que (con el estilo adecuado) podría hacer que la apariencia se deshabilite: los usuarios podrán ver el formulario, pero no haga clic/ingrese ninguna información en él ... Entonces, basado en algún evento, simplemente puede eliminar/ocultar este DIV con JS y hacer que el formulario "habilitado".

+0

Me gusta esta idea para "encanecer" el área. ¿Cómo hago que un div flote sobre otra área? Solo he hecho divs en línea antes de ... –

+0

Puedes hacerlo usando posicionamiento CSS absoluto/relativo. Es posible ajustar estos a través de JS directamente o usando alguna biblioteca JS como jQuery, que hace las cosas más fáciles ... – Laimoncijus

0

note por favor: si lo hace desactivado>

no se transmitirá el elemento de entrada si el usuario envía el formulario.

lo que quiere hacer en su lugar es:

<input type="text" name="surname" value="Korpela" readonly> 

si el formulario está dentro de un

<div style="background-color; grey;"> 

¿Eso cortar el pastel?

https://www.cs.tut.fi/~jkorpela/forms/readonly.html

+0

¿No debería ser readonly = "true"? –

+0

Quiere que se vuelva gris. 'readonly' no lo hace, solo desactiva el control del teclado. – Thielicious

0

La gente aquí tiene respuestas con bucles - no es necesario. Use .children().

$('form').children().prop('disabled',true); 

jsfiddle

Cuestiones relacionadas