Limpar campos de formulário com jQuery


402

Quero limpar todos os campos de entrada e área de texto de um formulário. Funciona da seguinte maneira ao usar um botão de entrada com a resetclasse:

$(".reset").bind("click", function() {
  $("input[type=text], textarea").val("");
});

Isso limpará todos os campos da página, não apenas os do formulário. Como seria o meu seletor exatamente como o botão de redefinição atual está localizado?



2
Método mais detalhado para redefinir um formulário aqui .
Uzbekjon

Respostas:


487
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});

49
Não esqueça seus input[type=password]campos.
SammyK

64
Esta resposta cobre a pergunta original. Aqueles que querem mais do que apenas campos de texto irá, obviamente, precisa adicionar código conforme necessário ...
ShaneBlake

2
lembre-se também de que haverá mais tipos de entradas além de type = password (como disse SammyK) no HTML5: type = url, type = digits, type = email, etc http://www.w3.org/TR/html5/forms .html # state-of-the-type-attribute
Gabriel

6
Uma pequena dica: esse seletor não seleciona elementos de entrada que dependem do tipo implícito = texto, você deve incluir explicitamente o tipo = texto na sua marcação. Isso pode ser óbvio, mas não era para mim, só agora :-)
Elbin

2
@CaptSaltyJack: que redefine-los para os valores padrão que não é a mesma coisa que limpá-los ...
ShaneBlake

628

Para o jQuery 1.6+ :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .prop('checked', false)
  .prop('selected', false);

Para jQuery <1.6 :

$(':input','#myform')
  .not(':button, :submit, :reset, :hidden')
  .val('')
  .removeAttr('checked')
  .removeAttr('selected');

Consulte este post: Redefinindo um formulário de vários estágios com jQuery

Ou

$('#myform')[0].reset();

Como o jQuery sugere :

Para recuperar e alterar as propriedades de DOM, tal como o checked, selectedou disabledestado de elementos de forma, utilizar o .prop () método.


3
O primeiro trecho de código definirá os valores das caixas de seleção como "" em vez de apenas desmarcá-las. E isso não afetará as seleções, porque são as tags de opção que são selecionadas.

6
para evitar a remoção de valores de caixa de seleção, eu usei o seguinte, inspirado por sua resposta: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');. Ela irá remover valores padrão (ou seja value="something", mas não para caixas de seleção ou seleciona.
Jeppe Mariager-Lam

17
NÃO USE ISTO (opção 1) se você tiver rádios, caixas de seleção ou seleções, você perderá muito tempo encontrando um bug estranho depois que seus valores desaparecerem. A versão correta, o que deixa seus valores intactos: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(baseado no comentário do Jeppe Mariager-Lam)
Konstantin Pereiaslov

8
Algum motivo para evitar a segunda opção?
19614 rineez

6
sua segunda solução é a resposta real
abzarak

159

Alguma razão para isso não ser usado?

$("#form").trigger('reset');

17
@ pythonian29033: e com sua abordagem, você redefinirá TODOS os formulários da página para os padrões ... o que definitivamente NÃO é o que um desenvolvedor normal deseja. Eu acho que um desenvolvedor jQuery deve tomar conhecimento do fato de que ele / ela precisa mudar o seletor de um código de exemplo para o apropriado ...
Sk8erPeter

8
@ Sk8erPeter Se você possui vários elementos na página com ID form, está fazendo algo errado. Você estaria certo se o seletor fosse form, mas é o seletor de ID #form.
brandones

@brandones: Você deveria ter prestado atenção ao que estava respondendo, porque está errado ... :) Verifique o código que pythonian29033 escreveu (ao qual eu respondi anteriormente): $("form").trigger('reset');realmente aciona o evento "reset" em TODOS os <form>elementos. Na maioria dos casos, pode estar errado. Mas $("#form").trigger('reset');(mostrado na resposta original) somente aciona o evento "reset" no elemento que possui o ID de "formulário" definido (acessível com o #formseletor). E sim, um id deve ser usado apenas uma vez, é por isso que eles chamam de "id", porque identifica um elemento inequivocamente.
precisa saber é o seguinte

61

Isso não trata dos casos em que os campos de entrada do formulário têm valores padrão não vazios.

Algo como deve funcionar

$('yourdiv').find('form')[0].reset();

Eu só tenho o código js do meu primeiro post e quero que ele funcione em cada página com vários botões de redefinição de várias formas. Portanto, é apenas o seletor que precisa de alguma contribuição.
tbuehlmann

51

se você usar seletores e transformar valores em valores vazios, ele não redefinirá o formulário, mas todos os campos em branco. Redefinir é criar o formulário como antes de qualquer ação de edição do usuário após o carregamento do formulário do lado do servidor. Se houver uma entrada com o nome "nome de usuário" e esse nome de usuário tiver sido pré-preenchido do lado do servidor, a maioria das soluções nesta página excluirá esse valor da entrada, não o redefinirá para o valor que era antes da alteração do usuário. Se você precisar redefinir o formulário, use o seguinte:

$('#myform')[0].reset();

se você não precisar redefinir o formulário, mas preencher todas as entradas com algum valor, por exemplo, valor vazio, poderá usar a maioria das soluções de outros comentários.


29

Simples, mas funciona como um encanto.

$("#form").trigger('reset'); //jquery
document.getElementById("myform").reset(); //native JS

14
Exceto que não limpa os campos. Ele define os padrões.
Mark Fraser

29

Se alguém ainda estiver lendo este tópico, aqui está a solução mais simples, usando não jQuery, mas JavaScript simples. Se seus campos de entrada estiverem dentro de um formulário, existe um comando simples de redefinição de JavaScript:

document.getElementById("myform").reset();

Saiba mais aqui: http://www.w3schools.com/jsref/met_form_reset.asp

Felicidades!


Como diz. Ele redefine o valor da forma inicial e não esvazia os valores. Mas sim, se você carregou o formulário com valores padrão, eles não serão limpos. Provavelmente um loop JS que vai calha de todas as entradas e as limpa
Tarmo Saluste


17

Por que ele precisa ser feito com JavaScript?

<form>
    <!-- snip -->
    <input type="reset" value="Reset"/>
</form>

http://www.w3.org/TR/html5/the-input-element.html#attr-input-type-keywords


Tentei isso primeiro, ele não limpará os campos com valores padrão.

Aqui está uma maneira de fazer isso com o jQuery:

$('.reset').on('click', function() {
    $(this).closest('form').find('input[type=text], textarea').val('');
});

11
Tentei isso primeiro, ele não limpará os campos com valores padrão.
tbuehlmann

Há outro motivo pelo qual você frequentemente precisa de JavaScript para este. O formulário pode não ser um "formulário". Por exemplo, seu formulário é realmente apenas uma coleção de entradas para um aplicativo Backbone.js / Ember.js / AngularJS e os dados nunca serão enviados como um formulário tradicional para o servidor, mas precisam ser processados ​​estritamente no lado do cliente JavaScript. Em casos como este, não há forma de redefinição para trabalhar.
John Munsch

3
.live()está obsoleto e também é lento / desnecessário. Você poderia apenas usar .bind()ou .on().
precisa

14

Se você deseja esvaziar todas as caixas de entrada, independentemente do seu tipo, é um minuto passo a passo

 $('#MyFormId')[0].reset();

12

Tenho o truque mais fácil para redefinir o formulário

jQuery("#review-form")[0].reset();

ou

$("#review-form").get().reset();

12

Com Javascript, você pode simplesmente fazê-lo com esta sintaxe getElementById("your-form-id").reset();

você também pode usar o jquery chamando a função reset dessa maneira $('#your-form-id')[0].reset();

Lembre-se de não esquecer [0]. Você receberá o seguinte erro se

TypeError: $ (...). Reset não é uma função

O JQuery também fornece um evento que você pode usar

$ ('# form_id'). trigger ("redefinir");

Eu tentei e funciona.

Nota: É importante observar que esses métodos somente redefinem seu formulário para o valor inicial definido pelo servidor no carregamento da página. Isso significa que, se sua entrada foi definida no valor 'valor definido' antes de você fazer uma alteração aleatória, o campo será redefinido para o mesmo valor depois que o método de redefinição for chamado.

Espero que ajude


7
$('#editPOIForm').each(function(){ 
    this.reset();
});

onde editPOIFormé o idatributo do seu formulário.


2
Sempre haverá um #editPOIForme, portanto, o .each()método não faz sentido. Mesmo se você adicionasse esse ID a vários formulários, ele retornaria apenas um deles.
precisa

11
O each () permite que você use isso (em vez de $ (this)) para acessar o objeto DOM subjacente e chame reset (). Supondo que você deseja redefinir os valores padrão, em vez de limpar tudo, esta é uma boa solução.
Dave

@Dave Poderia também usar #$('#editPOIForm').get(0).reset();
Thomas Daugaard

2
@ThomasDaugaard: exceto que se você usar get (0) ou simplesmente $ ('# editPOIForm') [0], receberá um erro de script se $ ('# editPOIForm') não corresponder a nenhum elemento, enquanto que cada () falhará sem um erro. Portanto, suponho que depende de suas prioridades no que diz respeito ao tratamento de erros.
Dave

6

Por que você não usa document.getElementById("myId").reset();? este é o simples e bonito


6

Código testado e verificado:

  $( document ).ready(function() {
    $('#messageForm').submit(function(e){
       e.preventDefault();
    });
    $('#send').click(function(e){
      $("#messageForm")[0].reset();
    });
  });

Javascript deve estar incluído $(document).readye deve estar com sua lógica.


5

A solução mais fácil e melhor é
$("#form")[0].reset();

Não use aqui -
$(this)[0].reset();


Apenas um pequeno aviso: se você tiver valores padrão para as entradas, digamos renderizados pelo servidor, form.reset();será redefinido para esses valores e não limpará as entradas.
Evil_Bengt

4

Digamos que, se você deseja limpar os campos e, exceto, accountType, na caixa suspensa de tempo médio será redefinida para um valor específico, ou seja, 'Todos' .Os campos restantes devem ser redefinidos para vazios, ou seja, caixa de texto. campos específicos como nossa exigência.

 $(':input').not('#accountType').each( function() {

    if(this.type=='text' || this.type=='textarea'){
             this.value = '';
       }
    else if(this.type=='radio' || this.type=='checkbox'){
         this.checked=false;
      }
         else if(this.type=='select-one' || this.type=='select-multiple'){
              this.value ='All';
     }
 });

Resposta mais completa. Obrigado.
RationalRabbit

Uma pergunta: como você direcionaria isso para um formulário específico, se estivesse fazendo isso de forma programática, em vez de clicar com o botão?
RationalRabbit


3

Use este código onde você deseja chamar a função de redefinição normal por jQuery

setTimeout("reset_form()",2000);

E escreva esta função para fora do site jQuery no documento pronto

<script>
function reset_form()
{
    var fm=document.getElementById('form1');
    fm.reset();
}
</script>

3

Alguns de vocês estavam reclamando que os rádios estão sem o status "marcado" padrão ... Tudo o que você precisa fazer é adicionar os seletores: radio,:: ao .not e o problema foi resolvido.

Se você não conseguir que todas as outras funções de redefinição funcionem, essa funcionará.

  • Adaptado da resposta da ngen

    function form_reset(formID){
        $(':input','#'+formID)
        .not(':button',':submit',':reset',':hidden',':radio',':checkbox')
        .val('');
    }

2
@using (Ajax.BeginForm("Create", "AcceptanceQualityDefect", new AjaxOptions()
{
    OnSuccess = "ClearInput",
    HttpMethod = "Post",
    UpdateTargetId = "defect-list",
    InsertionMode = InsertionMode.Replace
}, new { @id = "frmID" })) 
  1. frmID é a identificação do formulário
  2. OnSuccessda operação, chamamos a função JavaScript com o nome " ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
  3. se você fizer as duas coisas corretamente, não poderá impedir que funcione ...


1

O código a seguir limpa todo o formulário e seus campos estarão vazios. Se você deseja limpar apenas um formulário específico, se a página tiver mais de um formulário, mencione o ID ou a classe do formulário

$("body").find('form').find('input,  textarea').val('');

0

Se eu quiser limpar todos os campos, exceto accountType ... Use o seguinte

$q(':input','#myform').not('#accountType').val('').removeAttr('checked').removeAttr('selected');

11
você não quer perder os valores para as caixas en radiobuttons, mas apenas desmarcá-los, esta não é uma boa solução
Frankey

0

o código que vejo aqui e em questões relacionadas ao SO parece incompleto.

Redefinir um formulário significa definir os valores originais do HTML, então montei isso para um pequeno projeto que estava realizando com base no código acima:

            $(':input', this)
                .not(':button, :submit, :reset, :hidden')
                .each(function(i,e) {
                    $(e).val($(e).attr('value') || '')
                        .prop('checked',  false)
                        .prop('selected', false)
                })

            $('option[selected]', this).prop('selected', true)
            $('input[checked]',   this).prop('checked',  true)
            $('textarea',         this).each(function(i,e) { $(e).val($(e).html()) })

Informe-me se estiver faltando alguma coisa ou algo pode ser melhorado.


0

Nenhuma das opções acima funciona em um caso simples quando a página inclui uma chamada para o controle do usuário da web que envolve o processamento de solicitação IHttpHandler (captcha). Depois de enviar o requsrt (para processamento de imagem), o código abaixo não limpa os campos no formulário (antes de enviar a solicitação HttpHandler), tudo funciona corretamente.

<input type="reset"  value="ClearAllFields" onclick="ClearContact()" />

 <script type="text/javascript">
       function ClearContact() {
           ("form :text").val("");
       }
    </script>

0

Eu escrevi um plugin jQuery universal:

/**
 * Resets any input field or form
 */
$.fn.uReset = function () {
    return this.filter('form, :input').each(function () {
        var input = $(this);
        
        // Reset the form.
        if (input.is('form')) {
            input[0].reset();
            return;
        }

        // Reset any form field.
        if (input.is(':radio, :checkbox')) {
            input.prop('checked', this.defaultChecked);
        } else if (input.is('select')) {
            input.find('option').each(function () {
                $(this).prop('selected', this.defaultSelected);
            });
        } else if (this.defaultValue) {
            input.val(this.defaultValue);
        } else {
            console.log('Cannot reset to default value');
        }
    });
};

$(function () {
    // Test jQuery plugin.
    $('button').click(function (e) {
        e.preventDefault();
        
        var button = $(this),
            inputType = button.val(),
            form = button.closest('form');
        
        if (inputType === 'form') {
            form.uReset()
        } else {
            $('input[type=' + inputType + '], ' + inputType, form).uReset();
        }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h3>Form</h3>
<form>
    <input type="text" value="default"/><br /><br />
    Ch 1 (default checked) <input type="checkbox" name="color" value="1" checked="checked" /><br />
    Ch 2 <input type="checkbox" name="color" value="2" /><br />
    Ch 3 (default checked) <input type="checkbox" name="color" value="3" checked="checked" /><br /><br />
    <select name="time"><br />
        <option value="15">15</option>
        <option selected="selected" value="30">30</option>
        <option value="45">45</option>
    </select><br /><br />
    R 1 <input type="radio" name="color" value="1" /><br />
    R 2 (default checked) <input type="radio" name="color" value="2" checked="checked" /><br />
    R 3 <input type="radio" name="color" value="3" /><br /><br />
    <textarea>Default text</textarea><br /><br />
    
    <p>Play with form values and then try to reset them</p>
    
    <button type="button" value="text">Reset text input</button>
    <button type="button" value="checkbox">Reset checkboxes</button>
    <button type="button" value="select">Reset select</button>
    <button type="button" value="radio">Reset radios</button>
    <button type="button" value="textarea">Reset textarea</button>
    <button type="button" value="form">Reset the Form</button>
</form>


-2

Adicione o botão de redefinição oculto da seguinte maneira

<input id="resetBtn" type="reset" value="reset" style="display:none" />
// Call reset buttons click event
// Similar to ClearInputs('resetBtn');
function ClearInputs(btnSelector) {
     var btn = $("#" + btnSelector);
     btn.click();
}

-4

$ ('form'). submit (function () {

var el = $(this);

$('<button type="reset" style="display:none; "></button>')
    .appendTo(el)
    .click()
    .remove()
;

return false;

});

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.