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


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

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

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

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)

13

Você pode adicionar

 <fieldset class="fieldset">

e então você pode ligar

 $('.fieldset').prop('disabled', true);

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');

8

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

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

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.