Eu tenho um formulário com um botão de redefinição padrão codificado da seguinte forma:
<input type="reset" class="button standard" value="Clear" />
O problema é que o referido formulário é do tipo de vários estágios; portanto, se um usuário preencher um estágio e depois retornar mais tarde, os valores 'lembrados' para os vários campos não serão redefinidos quando o botão Limpar for clicado.
Eu estou pensando que anexar uma função jQuery para percorrer todos os campos e limpá-los 'manualmente' faria o truque. Eu já estou usando jQuery dentro do formulário, mas estou apenas começando a acelerar e não sei como fazer isso, além de fazer referência individual a cada campo por ID, o que não parece muito eficiente.
TIA por qualquer ajuda.
not()
se o seu formulário tiver alguma entrada oculta.Respostas:
atualizado em março de 2012.
Então, dois anos depois de eu ter respondido originalmente a essa pergunta, volto para ver que ela se transformou em uma grande bagunça. Sinto que está na hora de voltar a ele e tornar minha resposta realmente correta, pois é a mais votada e aceita.
Para o registro, a resposta de Titi está errada, pois não é o que o pôster original solicitou - é correto que seja possível redefinir um formulário usando o método reset () nativo, mas essa pergunta está tentando limpar um formulário fora do lembrado valores que permaneceriam no formulário se você o redefinir dessa maneira. É por isso que é necessária uma redefinição "manual". Suponho que a maioria das pessoas acabou nesta pergunta em uma pesquisa no Google e está realmente procurando o método reset (), mas não funciona no caso específico do OP.
Minha resposta original foi esta:
O que pode funcionar em muitos casos, inclusive no OP, mas, como indicado nos comentários e em outras respostas, limpará os elementos de rádio / caixa de seleção de qualquer atributo de valor.
Uma resposta mais correta (mas não perfeita) é:
Usando os
:text
,:radio
, etc. seletores por si só é considerado má prática por jQuery como eles acabam avaliando a*:text
que torna demorar muito mais tempo do que deveria. Prefiro a abordagem da lista de desbloqueio e gostaria de tê-la usado na minha resposta original. De qualquer forma, especificando ainput
parte do seletor e o cache do elemento do formulário, isso deve torná-lo a resposta com melhor desempenho aqui.Essa resposta ainda pode ter algumas falhas se o padrão das pessoas para elementos selecionados não for uma opção que tenha um valor em branco, mas certamente é tão genérico quanto possível e isso precisaria ser tratado caso a caso .
fonte
.val('')
redefine todos os valores,''
mesmo que esses valores sejam usados em botões de opção e caixas de seleção. Portanto, quando executo o código acima, perco informações valiosas do formulário, não apenas o que o usuário inseriu.Em http://groups.google.com/group/jquery-dev/msg/2e0b7435a864beea :
A configuração
myinput.val('')
pode não emular "redefinir" 100% se você tiver uma entrada como esta:Por exemplo, chamar
myinput.val('')
uma entrada com um valor padrão de 50 definiria como uma sequência vazia, enquanto chamarmyform.reset()
seria redefinir para seu valor inicial de 50.fonte
Há um grande problema com a resposta aceita de Paolo. Considerar:
A
.val('')
linha também limpará osvalue
itens atribuídos a caixas de seleção e botões de opção. Então, se (como eu) você fizer algo assim:O uso da resposta aceita transformará suas entradas em:
Opa - eu estava usando esse valor!
Aqui está uma versão modificada que manterá seus valores de caixa de seleção e rádio:
fonte
select
elementos. Você pode consertar isso?:text
,:password
etc. seletores por si só, sem especificar ainput
parte, caso contrário, ele avalia a*:text
qual passa por cada elemento no documento em vez de apenas<input>
as tags cominput:text
#myFormId
contexto transmitido como o segundo argumento para$()
- que é$(':input', '#context')
- este é idêntico ao$('#context').filter(':input')
Plugin jQuery
Criei um plugin jQuery para poder usá-lo facilmente em qualquer lugar que eu precisar:
Então agora eu posso usá-lo chamando:
fonte
.prop("checked", false)
? stackoverflow.com/questions/5874652/prop-vs-attr #Limpar formulários é um pouco complicado e não é tão simples quanto parece.
Sugiro que você use o formulário plugin jQuery e usar sua clearForm ou resetForm funcionalidade. Ele cuida da maioria dos casos de canto.
fonte
document.getElementById ('frm'). reset ()
fonte
Eu costumo fazer:
ou
fonte
Aqui está algo para você começar
Obviamente, se você tiver caixas de seleção / botões de opção, precisará modificar isso para incluí-los também e definir
.attr({'checked': false});
editar A resposta de Paolo é mais concisa. Minha resposta é mais prolífica porque não sabia sobre o
:input
seletor, nem pensei em simplesmente remover o atributo marcado.fonte
Considere usar o plug - in de validação - é ótimo! E redefinir o formulário é simples:
fonte
Acho que isso funciona bem.
fonte
basicamente, nenhuma das soluções fornecidas me faz feliz. conforme indicado por algumas pessoas, eles esvaziam o formulário em vez de redefini-lo.
no entanto, existem algumas propriedades javascript que ajudam:
estes armazenam o valor que um campo tinha quando a página foi carregada.
escrever um plugin jQuery agora é trivial: (para os impacientes ... aqui está uma demonstração http://jsfiddle.net/kritzikratzi/N8fEF/1/ )
código-plugin
uso
algumas notas ...
$( "#container" ).resetValue()
, não vai funcionar. sempre use$( "#container :input" )
lugar.fonte
Você pode achar que isso é realmente mais fácil de resolver sem o jQuery.
No JavaScript comum, isso é tão simples quanto:
Eu tento sempre lembrar que, enquanto usamos o jQuery para aprimorar e acelerar nossa codificação, às vezes não é realmente mais rápido. Nesses casos, geralmente é melhor usar outro método.
fonte
Fiz uma pequena variação da boa solução de Francis Lewis . O que a solução dele não faz é definir as opções suspensas como em branco. (Acho que quando a maioria das pessoas quer "limpar", provavelmente quer deixar todos os valores vazios.) Esse é o caso
.find('select').prop("selectedIndex", -1)
.fonte
Normalmente, adiciono um botão de redefinição oculto ao formulário. quando necessário, basta: $ ('# reset'). click ();
fonte
Modificação da resposta mais votada para a
$(document).ready()
situação:fonte
Simplesmente use o seguinte
jQuery Trigger event
:Isso redefinirá caixas de seleção, botões de opção, caixas de texto, etc ... Essencialmente, ele transforma seu formulário no estado padrão. Basta colocar o
#ID, Class, element
interior dojQuery
seletor.fonte
isso funcionou para mim, a resposta pyrotex não redefiniu os campos selecionados, levou a sua edição aqui:
fonte
Estou usando a solução Paolo Bergantino, que é ótima, mas com alguns ajustes ... Especificamente para trabalhar com o nome do formulário em vez de um id.
Por exemplo:
Agora, quando eu quero usá-lo um poderia fazer
Como você vê, isso funciona com qualquer formulário e, como estou usando um estilo css para criar o botão, a página não será atualizada quando clicada. Mais uma vez, agradeço a Paolo por sua contribuição. O único problema é se eu tiver valores padrão no formulário.
fonte
Usei a solução abaixo e funcionou para mim (misturando javascript tradicional com jQuery)
fonte
Eu sou apenas um intermediário em PHP e um pouco preguiçoso para mergulhar em uma nova linguagem como JQuery, mas não é a seguinte uma solução simples e elegante?
Não vejo uma razão para não ter dois botões de envio, apenas com propósitos diferentes. Então simplesmente:
Você acabou de redefinir seus valores para o valor que deveria ser o padrão.
fonte
Um método que usei em um formulário bastante grande (mais de 50 campos) era apenas recarregar o formulário com o AJAX, basicamente fazendo uma chamada de volta ao servidor e retornando os campos com seus valores padrão. Isso tornou muito mais fácil do que tentar pegar cada campo com JS e defini-lo como seu valor padrão. Também me permitiu manter os valores padrão em um único local - o código do servidor. Nesse site, também havia alguns padrões diferentes, dependendo das configurações da conta e, portanto, não precisei me preocupar em enviá-los para o JS. O único pequeno problema com o qual tive que lidar foram alguns campos de sugestão que exigiam inicialização após a chamada do AJAX, mas não muito.
fonte
Todas essas respostas são boas, mas a maneira mais fácil de fazer isso é com uma redefinição falsa, ou seja, você usa um link e um botão de redefinição.
Basta adicionar um pouco de CSS para ocultar o botão de redefinição real.
E então no seu link você adiciona da seguinte forma
Espero que isto ajude! UMA.
fonte
fonte
Aqui com a atualização para caixas de seleção e seleciona:
fonte
Eu estava tendo o mesmo problema e o cargo de Paolo me ajudou, mas eu precisava ajustar uma coisa. Meu formulário com o ID advancedindexsearch continha apenas campos de entrada e obtém os valores de uma sessão. Por alguma razão, o seguinte não funcionou para mim:
Se eu colocar um alerta depois disso, vi os valores removidos corretamente, mas depois foram substituídos novamente. Ainda não sei como ou por quê, mas a seguinte linha fez o truque para mim:
fonte
A resposta de Paolo não conta para os selecionadores de data, adicione isto em:
fonte
Melhorei um pouco a resposta original de Paolo Bergantino
Dessa maneira, eu posso passar qualquer elemento de contexto para a função. Eu posso redefinir o formulário inteiro ou apenas um determinado conjunto de campos, por exemplo:
Além disso, os valores padrão das entradas são mantidos.
fonte
aqui está a minha solução, que também funciona com os novos tipos de entrada html5:
fonte
break
abaixocheckbox
eradio
. Não há necessidade em sua posição atual.Complementando a resposta aceita, se você usar o plug-in SELECT2, precisará recuperar o script select2 para fazer alterações em todos os campos select2:
fonte
fonte