2009-09-03 6 views

Respuesta

118

Configuración de un elemento de formulario para discapacitados se detendrá en marcha en el servidor, por ejemplo:

<input disabled="disabled" type="text" name="test"/> 

en JavaScript que significaría algo así:

var inputs = document.getElementsByTagName('input'); 
for(var i = 0;i < inputs.length; i++) { 
    if(inputs[i].style.display == 'none') { 
     inputs[i].disabled = true; 
    } 
} 
document.forms[0].submit(); 

En jQuery:

$('form > input:hidden').attr("disabled",true); 
    $('form').submit(); 
+15

Con el pseudo selector 'jQuery' input' en lugar de 'input' también puede desactivar fácilmente todos los elementos' select' y 'textarea' –

+8

En jQuery> = 1.6, en lugar de' attr ("disabled", true) ' debería usar 'prop (" disabled ", true)' http://api.jquery.com/prop/ – yorch

+2

@ dominicbri7 - A partir de jQuery 1.6, se recomienda usar '.prop()' en lugar de '.attr()' para obtener AND estableciendo propiedades deshabilitadas y comprobadas. Verificar y/o configurar usando '.attr()' en algunos casos devolverá resultados no deseados. Lea la documentación de jQuery antes de comentar a qué se refería Yorch. – zgr024

1

Quitaría el valor de la entrada o separaría el objeto de entrada del DOM para que no exista para ser publicado en primer lugar.

13

Puede usar javascript para establecer el atributo deshabilitado. El evento de clic del botón "enviar" es probablemente el mejor lugar para hacer esto.

Sin embargo, aconsejaría no hacer esto en absoluto. Si es posible, debe filtrar su consulta en el servidor. Esto será más confiable.

7

Si quieres desactivar todos los elementos o ciertos elementos dentro de un elemento primario oculto, puede utilizar

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled"); 

Este ejemplo http://jsfiddle.net/gKsTS/ desactiva todos los cuadros de texto dentro de un div oculto

+0

Esta es una muy buena solución ya que itera a través del div oculto y deshabilita todo. debería obtener más +1 – yeppe

3

Una muy simple (pero no siempre la solución más conveniente) es eliminar el atributo "nombre": el estándar requiere que los navegadores no envíen valores sin nombre, y todos los navegadores que conozco cumplen con esta regla.

+3

No es recomendable porque si cambia los estados a través de javascript, apenas puede restablecer las entradas sin almacenar en caché todos los atributos de nombre. Es mucho más fácil cambiar el estado de discapacidad. – Simon

4

¿Qué hay de:

$('#divID').children(":input").prop("disabled", true); // disable 

y

$('#divID').children(":input").prop("disabled", false); // enable 

Para alternar todas las entradas infantiles (selecciona, casillas de verificación, de entrada, áreas de texto, etc.) dentro de un div oculto.

+0

Esta es una gran solución si desea obtener todas las entradas. buen trabajo – doz87

Cuestiones relacionadas