desativar todos os elementos do formulário dentro de div
161
existe uma maneira de desabilitar todos os campos (área de texto / campo de texto / opção / entrada / caixa de seleção / enviar etc) em um formulário informando apenas o nome do pai div em jquery / javascript?
Observe que, ao fazer isso, você faz com que os valores desses elementos "desapareçam" ao enviar o formulário - para preservar o valor, torná-los readOnly, não desabilitados.
Uma idéia pode ser ocultar / mostrar uma div na frente dos controles que permite / impedir que sejam clicados, além de estilizar controles desabilitados com css.
22313 Jaider
Respostas:
261
Tente usar o :inputseletor, juntamente com um seletor pai:
posso usar isso para definir todas as entradas dentro de div para o valor 0?
jackson5
2
Eu quero desativar <a> também ... O meu <a> também tem um clique também
RAJ 30/07
7
Citando jQuery : Como: input é uma extensão jQuery e não faz parte da especificação CSS, as consultas que usam: input não podem tirar proveito do aumento de desempenho fornecido pelo método DOM querySelectorAll () nativo do DOM. Para obter o melhor desempenho ao usar: input para selecionar elementos, primeiro selecione os elementos usando um seletor CSS puro e use .filter (": input").
acme
2
@ acme: Concordo 100%, mas a pergunta não dá nenhuma dica sobre qual seletor eu poderia filtrar. A única informação que recebi foi que o usuário deve ser capaz de fazê-lo com um nome de paidiv e é isso. Se tivesse mais informações, eu poderia ter encontrado uma solução mais eficiente.
Andrew Whitaker
1
Use .prop () em vez de .attr () (acima jquery 1.6)
deve ser ('entrada, área de texto, botão') todos os seletores devem ser citados com um conjunto de aspas. api.jquery.com/multiple-selector Fazendo do seu jeito, você está enviando vários argumentos.
Ivan Ivanić
2
Isso encontrará apenas entradas, ignorando áreas de texto e botões. O seletor: input é o caminho a seguir, mas se você quiser listá-los explicitamente, precisará usá-lo $('#mydiv').find('input, textarea, button').
Mark Hildreth
1
... ou apenas $ ('# your-form'). children (). prop ('disabled', true);
walv
@walv seu código só funciona se todos os elementos do formulário forem um único descendente do formulário. Find () localiza todos os elementos da lista, independentemente do nível descendente. Esta linha de código está correta, exceto usando o prop em vez de attr para novas versões do jquery.
Estou usando a função abaixo em vários pontos. Funciona em elementos div ou button em uma tabela, desde que o seletor direito seja usado. Apenas ": button" não seria reativado para mim.
Para mim, a resposta aceita não funcionou, pois eu tinha alguns campos ocultos da rede asp que foram desativados também, então escolhi apenas desativar os campos visíveis
//just to save the list so we can enable fields latervar list =[];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function(){
list.push('#'+this.id);});
$(list.join(',')).attr('readonly',true);
readOnly
, não desabilitados.Respostas:
Tente usar o
:input
seletor, juntamente com um seletor pai:fonte
div
e é isso. Se tivesse mais informações, eu poderia ter encontrado uma solução mais eficiente.fonte
$('#mydiv').find('input, textarea, button')
.Para jquery 1.6+, use em
.prop()
vez de.attr()
,ou
fonte
fonte
Simplesmente esta linha de código desativará todos os elementos de entrada
fonte
Que tal fazer isso usando apenas o atributo HTML 'desativado'
Apenas colocando desativado no conjunto de campos, todos os campos dentro desse conjunto são desativados.
fonte
Estou usando a função abaixo em vários pontos. Funciona em elementos div ou button em uma tabela, desde que o seletor direito seja usado. Apenas ": button" não seria reativado para mim.
fonte
A seguir, desabilitaremos toda a entrada, mas não a classe btn e também a classe adicionada para substituir o CSS desabilitado.
classe css
fonte
Para mim, a resposta aceita não funcionou, pois eu tinha alguns campos ocultos da rede asp que foram desativados também, então escolhi apenas desativar os campos visíveis
fonte
Use a classe CSS para impedir a edição dos elementos div
CSS:
JS:
Ou adicione o nome da classe na tag HTML. Isso impedirá a edição dos elementos Div.
fonte
Apenas tipo de texto
Somente tipo de senha
Apenas tipo de email
fonte