¿Cómo deshabilitar todos los <input> dentro de un formulario con jQuery?

Respuestas:

283

En versiones anteriores que podrías usar attr. A partir de jQuery 1.6 deberías usar propen su lugar:

$("#target :input").prop("disabled", true);

Para deshabilitar todos los elementos de formulario dentro de 'target'. Ver :input:

Coincide con todos los elementos de entrada, área de texto, selección y botón.

Si solo quieres los <input>elementos:

$("#target input").prop("disabled", true);
cletus
fuente
21
A partir de jQuery 1.6 debe usar$("#target :input").prop("disabled", true);
danijel
44
Alguien debería editar la respuesta con el método actualizado; esta es solo una mala información en este momento.
Ben Claar
y en una devolución de llamada submit (), usando $ (this), ¿cómo hacer eso?
Olivier Pons
2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. No estoy seguro de si puede consolidar eso mejor, todavía soy bastante novato en jQuery.
wjervis
39

El ejemplo anterior es técnicamente incorrecto. Según la última versión de jQuery, el prop()método debe usarse para cosas como deshabilitado. Ver su página API.

Para deshabilitar todos los elementos de formulario dentro del 'objetivo', use el selector de entrada: que coincide con todos los elementos de entrada, área de texto, selección y botón.

$("#target :input").prop("disabled", true);

Si solo quieres los elementos, usa esto.

$("#target input").prop("disabled", true);
MetaSkills
fuente
15

También la forma más concisa es utilizar su motor de selección. Entonces, para deshabilitar todos los elementos de formulario en un div o formulario principal.

$myForm.find(':input:not(:disabled)').prop('disabled',true)
MetaSkills
fuente
13

puedes añadir

 <fieldset class="fieldset">

y luego puedes llamar

 $('.fieldset').prop('disabled', true);
Otto Kanellis
fuente
8

Para deshabilitar todos los formularios, tan fácil como escribir:

jQuery 1.6+

$("#form :input").prop("disabled", true);

jQuery 1.5 y abajo

$("#form :input").attr('disabled','disabled');
Angel Cuenca
fuente
8

Con esta línea puede deshabilitar cualquier campo de entrada en un formulario

$('form *').prop('disabled', true);
Samir Rahimy
fuente
esto agrega innecesariamente una propiedad deshabilitada a cada elemento del formulario.
Osvaldo Maria
@OsvaldoMaria, sí, eso es debido al selector de estrella (todos), puede agregar una clase .custom a todos los elementos de entrada que desea deshabilitar, luego cambiar el selector a $ ('form .custom-class'). Prop ( 'deshabilitado', verdadero ').
Samir Rahimy
-1

Gnarf ha dado la respuesta definitiva (que cubre los cambios a la API jQuery en la versión 1.6)

ErichBSchulz
fuente
Pidió "deshabilitar todas las entradas dentro de un formulario", no solo "deshabilitar todas las entradas".
Bengala
@Bengala seguro, pero me estás marcando duramente por ser el primero en señalar que la API había cambiado. En el momento en que publiqué esto, ninguna de las otras respuestas mencionó este punto.
ErichBSchulz
Entiendo, pero creo que debe incluir una respuesta correcta con los créditos respectivos, el enlace solo muestra cómo deshabilitar todas las entradas, lo cual insisto, no responde en absoluto a la pregunta.
Bengala