ChatGPT解决这个技术问题 Extra ChatGPT

Clear form fields with jQuery

I want to clear all input and textarea fields in a form. It works like the following when using an input button with the reset class:

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

This will clear all fields on the page, not just the ones from the form. How would my selector look like for just the form the actual reset button lives in?

Check out the answer by Paolo Bergantino stackoverflow.com/questions/680241/blank-out-a-form-with-jquery
More detailed method to reset a form here.

l
luvejo

For jQuery 1.6+:

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

For jQuery < 1.6:

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

Please see this post: Resetting a multi-stage form with jQuery

Or

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

As jQuery suggests:

To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method.


to avoid removing checkbox values, I used the following, inspired by your answer: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');. It will remove default values (i.e. value="something", but not for checkboxes or selects.
DO NOT USE THIS (option 1) if you have radios, checkboxes, or selects, you'll waste a lot of time finding a strange bug after their values disappear. The correct version, which leaves their values intact: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val(''); (based on Jeppe Mariager-Lam's comment)
Any reason to avoid the second option?
Most of the time second option is what we need IMO.
your second solution is the actual answer
S
ShaneBlake
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});

Don't forget your input[type=password] fields.
This answer covers the original question. Those wanting more than just text fields will obviously need to add code as needed...
also remember there will be more type of inputs other than type=password (like SammyK said) in HTML5: type=url, type=digits, type=email, etc http://www.w3.org/TR/html5/forms.html#states-of-the-type-attribute
A small tip: this selector won't select input elements that are relying on the implicit type=text, you must explicitly include the type=text on your markup. That may be obvious, but it wasn't to me, just now :-)
@CaptSaltyJack: That resets them to default values which isn't the same thing as clearing them...
u
user768680

Any reason this shouldn't be used?

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

I think clearing and resetting the form is different. Check this demo: jsfiddle.net/daubac402/7newh9Lk
p
parapura rajkumar

This won't handle cases where form input fields have non empty default values.

Something like should work

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

I just have the js code from my first post and want it to work on each page with several reset buttons in several forms. So it's just the selector that needs some contribution.
L
Lukas Liesis

if you use selectors and make values to empty values, it is not resetting the form, it's making all fields empty. Reset is to make form as it was before any edit actions from user after the load of form from server side. If there is an input with name "username" and that username was prefilled from server side, most of solutions on this page will delete that value from input, not reset it to the value how it was before user's changes. If you need to reset the form, use this:

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

if you need not to reset the form, but fill all inputs with some value, for example empty value, then you can use most of the solutions from other comments.


D
Djizeus

Simple but works like a charm.

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

Except it doesn't clear the fields. It sets them to their defaults.
T
Tarmo Saluste

If someone is still reading this thread, here is the simplest solution using not jQuery, but plain JavaScript. If your input fields are inside a form, there is a simple JavaScript reset command:

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

More about it here: http://www.w3schools.com/jsref/met_form_reset.asp

Cheers!


As it says. It resets to the innital form value and not emptyes the values. But yes, If you have loaded form with default values, they won't be cleared. Probably a JS loop that goes trough all inputs and clears them
a
apen
$('form[name="myform"]')[0].reset();

k
kumarharsh

Why does it need to be done with any JavaScript at all?

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

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

Tried that one first, it won't clear fields with default values.

Here's a way to do it with jQuery, then:

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

Tried that one first, it won't clear fields with default values.
There's another reason you often need JavaScript for this one. The form may not be a "form" at all. For example, your form is really just a collection of inputs for a Backbone.js/Ember.js/AngularJS app and the data will never be submitted as a traditional form to the server but needs to be processed strictly with JavaScript client side. In cases like this there's no form for reset to work on.
.live() is deprecated, and also it's slow/unnecessary. You could just use .bind() or .on().
R
Rashi Goyal

If you want to empty all input boxes irrespective of its type then it's a minute step by

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

R
RavingDev

I got easiest trick to reset form

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

or

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

B
BoCyrill

With Javascript you can simply do it with this syntax getElementById("your-form-id").reset();

you can also use jquery by calling the reset function this way $('#your-form-id')[0].reset();

Remember not to forget [0]. You will get the following error if

TypeError: $(...).reset is not a function

JQuery also provides an event you can use

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

I tried and it works.

Note: Its important to notice that these methods only reset your form to their initial value set by the server on page load. This means if your input was set on the value 'set value' before you did a random change, the field will be reset to that same value after reset method is called.

Hope it helps


J
Jorge Y. C. Rodriguez
$('#editPOIForm').each(function(){ 
    this.reset();
});

where editPOIForm is the id attribute of your form.


There will only ever be one #editPOIForm and so the .each() method makes no sense. Even if you added this id to multiple forms it would only ever return one of them.
The each() allows you to use this (instead of $(this)) to get at the underlying DOM object, and call reset(). Assuming you want to reset to default values, instead of clearing everything, this is a good solution.
@Dave Might as well just use $('#editPOIForm').get(0).reset();
@ThomasDaugaard: except that if you use get(0) or simply $('#editPOIForm')[0] you'll get a script error if $('#editPOIForm') matches no elements, whereas each() will fail without an error. So I suppose it depends on your priorities as far as error handling goes.
C
Carlos Alvarez

Why you dont use document.getElementById("myId").reset(); ? this is the simple and pretty


G
Gaurang Joshi

Tested and verified code:

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

Javascript must be included in $(document).ready and it must be with your logic.


B
BlackBeard

Most easy and best solution is-
$("#form")[0].reset();

Don't use here -
$(this)[0].reset();


Just a little warning: If you have default values for the inputs, let's say server-rendered, then form.reset(); will reset to those values, and not clear the inputs.
L
Lewis

By using a combination of JQuery's .trigger() and native Javascripts's .reset() all form elements can be reset to blank state.

$(".reset").click(function(){
    $("#<form_id>").trigger("reset");
});

Replace <form_id> with id of form to reset.


M
Martijn Pieters

Let us say if you want to clear the fields and except accountType,in the mean time dropdown box will be reset to particular value,i.e 'All'.Remaining fields should be reset to empty i.e text box.This approach will be used for clearing particular fields as our requirement.

 $(':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';
     }
 });

Most complete answer. Thanks.
One question: How would you direct this to a specific form if you were doing it programmatically, rather than with a button click?
M
Matheno

I use this :

$(".reset").click(function() {
  $('input[type=text]').each(function(){
     $(this).val('');
  });
});

And here is my button:

<a href="#" class="reset">
  <i class="fa fa-close"></i>
     Reset
</a>

There is a reset input type available w3.org/TR/html-markup/input.reset.html
G
Gregory Bowers

Some of you were complaining that radios and such are cleared of default "checked" status... All you have to do is add the :radio, :checkbox selectors to the .not and the problem is solved.

If you can't get all the other reset functions to work, this one will.

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


K
Khalid Butt
$(document).ready(function() {
    $('#reset').click(function() {
    $('#compose_form').find("input[type=text] , textarea ").each(function() {
    $(this).val('');
   });
  });
});  

M
Monzur

Use this Code Where you want to Call Normal Reset Function by jQuery

setTimeout("reset_form()",2000);

And Write this Function Out Site jQuery on Document Ready

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

S
Sk8erPeter
@using (Ajax.BeginForm("Create", "AcceptanceQualityDefect", new AjaxOptions()
{
    OnSuccess = "ClearInput",
    HttpMethod = "Post",
    UpdateTargetId = "defect-list",
    InsertionMode = InsertionMode.Replace
}, new { @id = "frmID" })) 

frmID is the identification of the form OnSuccess of the operation we call the JavaScript function with the name "ClearInput" if you do both of these right, then you will not be able to stop it from working...


s
shivaP

The following code clear all the form and it's fields will be empty. If you want to clear only a particular form if the page is having more than one form, please mention the id or class of the form

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

M
Martijn Pieters

If i want to clear all the fields except accountType..Use the following

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

you don't want to lose the values for the checkboxes en radiobuttons, but only uncheck them, this one is not a good solution
R
Rafael Kitover

the code I see here and on related SO questions seems incomplete.

Resetting a form means setting the original values from the HTML, so I put this together for a little project I was doing based on the above code:

            $(':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()) })

Please let me know if I'm missing anything or anything can be improved.


u
user2366666

None of the above works on a simple case when the page includes a call to web user control that involves IHttpHandler request processing (captcha). After sending the requsrt (for image processing) the code below does not clear the fields on the form (before sending the HttpHandler request ) everythings works correctly.

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

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

P
Pete

I've written a universal jQuery plugin:

/** * 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(); } }); });

Form



Ch 1 (default checked)
Ch 2
Ch 3 (default checked)



R 1
R 2 (default checked)
R 3



Play with form values and then try to reset them


S
Sandip Jadhav

Add hidden reset button as follows

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

A
Anant - Alive to die
$('form').submit(function() {

    var el = $(this);

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

    return false;

});