Como desativar todas as <entradas> dentro de um formulário com o jQuery?

145
<form id="target">
....
</form>
AMD
fonte

Respostas:

283

Nas versões mais antigas você poderia usar attr. A partir do jQuery 1.6, você deve usar prop:

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

Desabilitar todos os elementos do formulário dentro de 'target'. Veja :input:

Corresponde a todos os elementos de entrada, área de texto, seleção e botão.

Se você deseja apenas os <input>elementos:

$("#target input").prop("disabled", true);
cleto
fonte
21
A partir de jQuery 1.6 você deve usar$("#target :input").prop("disabled", true);
danijel
4
Alguém deve editar a resposta com o método atualizado - neste momento, são apenas informações ruins.
Ben Claar 17/10
e em um retorno de chamada submit (), usando $ (this), como fazer isso?
precisa saber é o seguinte
2
@OlivierPons $(this).closest('form').find('input').prop('disabled', true);. Não tenho certeza se você pode consolidar isso melhor, ainda sou bastante noobish no jQuery.
wjervis
39

O exemplo acima está tecnicamente incorreto. De acordo com o jQuery mais recente, use o prop()método deve ser usado para coisas como desativado. Veja a página da API deles.

Para desativar todos os elementos do formulário dentro de 'target', use o seletor: input que corresponde a todos os elementos de entrada, área de texto, seleção e botão.

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

Se você deseja apenas os elementos, use isso.

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

Além disso, a maneira mais concisa é usar o mecanismo de seleção. Portanto, para desativar todos os elementos de formulário em um div ou formulário pai.

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

Você pode adicionar

 <fieldset class="fieldset">

e então você pode ligar

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

Para desabilitar todos os formulários, tão fácil quanto escrever:

jQuery 1.6+

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

jQuery 1.5 e abaixo

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

Com essa linha, você pode desativar qualquer campo de entrada em um formulário

$('form *').prop('disabled', true);
Samir Rahimy
fonte
isso adiciona desnecessariamente uma propriedade desabilitada a cada elemento no formulário.
Osvaldo Maria
@OsvaldoMaria sim, isso é por causa do seletor estrela (todos), você pode adicionar uma classe .custom a todos os elementos de entrada que deseja desativar e alterar o seletor para $ ('form .custom-class'). Prop ( 'desativado', verdadeiro ').
Samir Rahimy 13/11/19
-1

A resposta definitiva (cobrindo alterações no jQuery api na versão 1.6) foi dada pelo Gnarf

ErichBSchulz
fonte
Ele pediu para "desativar todas as entradas dentro de um formulário", não apenas "desativar todas as entradas".
Bengala
@ Bengala, com certeza, mas você está me marcando severamente por ser o primeiro a apontar que a API mudou. Na época em que publiquei isso, nenhuma das outras respostas mencionou esse ponto.
ErichBSchulz 25/09
Eu entendo, mas acho que você deve incluir uma resposta correta com os respectivos créditos, o link apenas mostra como desativar todas as entradas, o que eu insisto, não responde a todas as perguntas.
Bengala