Очистити поля форми за допомогою jQuery


402

Я хочу очистити всі поля введення та текстової області у формі. При використанні кнопки введення з resetкласом це працює наступним чином :

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

Це очистить усі поля на сторінці, а не лише ті, що знаходяться у формі. Як би виглядав мій перемикач лише тієї форми, в якій живе фактична кнопка скидання?


Ознайомтеся з відповіддю Паоло Бергантіно stackoverflow.com/questions/680241/blank-out-a-form-with-jquery
Злий кодер

2
Більш детальний метод скидання форми тут .
Узбекйон

Відповіді:


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

49
Не забудьте свої input[type=password]поля.
SammyK

64
Ця відповідь охоплює оригінальне запитання. Тим, хто хоче більше, ніж просто текстові поля, очевидно, потрібно буде додати код за потребою ...
ShaneBlake

2
також пам’ятайте, що в HTML5 буде більше типів входів, ніж type = пароль (як сказав SammyK): type = url, type = цифри, type = email тощо. http://www.w3.org/TR/html5/forms .html # атрибут state-of-the-type
Габріель,

6
Невелика порада: цей селектор не буде вибирати вхідні елементи, які покладаються на неявний тип = текст, ви повинні чітко включати тип = текст у свою розмітку. Це може бути очевидним, але це не було для мене, просто зараз :-)
Елбін

2
@CaptSaltyJack: Це скидає їх до значень за замовчуванням, що не те саме, що їх очищення ...
ShaneBlake

628

Для jQuery 1.6+ :

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

Для jQuery <1.6 :

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

Будь ласка, дивіться цю публікацію: Скидання багатоетапної форми за допомогою jQuery

Або

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

Як пропонує jQuery :

Для того, щоб витягувати і змінювати властивості DOM , такі як checked, selectedабо disabledстан елементів форми, використовувати .prop () метод.


3
Перший фрагмент коду встановить значення прапорців на "", а не знімати їх. І це не вплине на вибір, оскільки вибираються теги опцій.

6
щоб уникнути видалення значень прапорця, я використовував наступне, натхнена ваш відповідь: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value');. Він видалить значення за замовчуванням (тобто value="something", але не для прапорців або вибору.
Jeppe Mariager-Lam

17
НЕ ВИКОРИСТОВУЙТЕ ЦЕ (варіант 1), якщо у вас є радіостанції, прапорці або вибрані місця, ви витратите багато часу на пошук дивного помилки після зникнення їх значень. Правильна версія, яка залишає їхні цінності недоторканими: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, :radio, select').val('');(на основі коментаря Джеппе Маріагер-Лама)
Костянтин

8
Будь-яка причина уникати другого варіанту?
rineez

6
ваше друге рішення - фактична відповідь
абзарак

159

З якоїсь причини це не слід використовувати?

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

17
@ pythonian29033: і з вашим підходом ви скинете ВСІ форми на сторінці до значень за замовчуванням ... що, безумовно, НЕ того, чого хоче звичайний розробник. Я думаю, що розробник jQuery повинен помітити той факт, що йому / їй потрібно змінити селектор з прикладу коду на відповідний ...
Sk8erPeter

8
@ Sk8erPeter Якщо у вас на сторінці кілька елементів із ідентифікатором form, ви робите це неправильно. Ви б мали рацію, якби був селектор form, але це швидше селектор ідентифікаторів #form.
brandones

@brandones: Вам слід було б звернути увагу на те, на що ви відповідали, тому що ви помиляєтесь ... :) Перевірте код, який написав pythonian29033 (на який я відповів раніше): $("form").trigger('reset');дійсно запускає подію "скидання" на ВСІ <form>елементи. У більшості випадків це може бути неправильно. Але $("#form").trigger('reset');(показано в оригінальній відповіді) лише запускає подію "скидання" на елементі, який має набір ідентифікаторів "форми" (доступний разом із #formселектором). І так, один ідентифікатор слід використовувати лише один раз, саме тому вони називають його "id", оскільки він однозначно ідентифікує один елемент.
Sk8erPeter

61

Це не обробляє випадки, коли поля введення форми мають непорожні значення за замовчуванням.

Щось подібне повинно працювати

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

Я просто маю js-код з мого першого повідомлення і хочу, щоб він працював на кожній сторінці з кількома кнопками скидання в декількох формах. Так що певний внесок потребує саме селектор.
tbuehlmann

51

якщо ви використовуєте селектори і робите значення порожніми значеннями, це не скидає форму, вона робить усі порожні поля. Скидання - це зробити форму такою, якою вона була до будь-яких дій редагування у користувача після завантаження форми з боку сервера. Якщо є вхід з ім'ям "ім'я користувача" і це ім'я користувача було попередньо заповнене з боку сервера, більшість рішень на цій сторінці видалить це значення з введення, а не скине його на значення, яким воно було до змін користувача. Якщо вам потрібно скинути форму, скористайтеся цим:

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

якщо вам не потрібно скидати форму, а заповнити всі входи деяким значенням, наприклад порожнім значенням, то ви можете використовувати більшість рішень з інших коментарів.


29

Простий, але працює як шарм.

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

14
За винятком того, що поля не очищаються. Це встановлює їх за замовчуванням.
Марк Фрейзер

28

Якщо хтось ще читає цю тему, ось найпростіше рішення з використанням не jQuery, а простого JavaScript. Якщо поля введення знаходяться всередині форми, існує проста команда скидання JavaScript:

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

Більше про це тут: http://www.w3schools.com/jsref/met_form_reset.asp

Ура!


Як говориться. Він скидає значення вродженої форми і не спорожнює значення. Але так, якщо ви завантажили форму зі значеннями за замовчуванням, вони не будуть очищені. Можливо, цикл JS, який проходить через усі входи та очищає їх
Тармо Салусте,


17

Чому це взагалі потрібно робити з будь-яким JavaScript?

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

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


Спробувавши це спочатку, він не очистить поля зі значеннями за замовчуванням.

Ось спосіб зробити це за допомогою jQuery, тоді:

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

1
Спробувавши це спочатку, він не очистить поля зі значеннями за замовчуванням.
tbuehlmann

Є ще одна причина, для якої вам часто потрібен JavaScript. Форма може взагалі не бути "формою". Наприклад, ваша форма насправді є лише сукупністю вхідних даних для додатка Backbone.js / Ember.js / AngularJS, і дані ніколи не будуть надсилатися як традиційна форма на сервер, але їх потрібно суворо обробляти з клієнтською стороною JavaScript. У таких випадках немає форми для відновлення роботи.
Джон Мюнш

3
.live()застаріло, а також повільно / непотрібно. Ви можете просто використовувати .bind()або .on().
Кевін Біл

14

Якщо ви хочете спорожнити всі вхідні поля незалежно від його типу, це крок за хвилиною

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

12

Я отримав найпростіший трюк для скидання форми

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

або

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

12

З Javascript ви можете просто зробити це за допомогою цього синтаксису getElementById("your-form-id").reset();

Ви також можете використовувати jquery, викликавши функцію скидання таким чином $('#your-form-id')[0].reset();

Пам'ятайте, щоб не забути [0]. Ви отримаєте таку помилку, якщо

TypeError: $ (...) скидання не є функцією

JQuery також пропонує подію, яку можна використовувати

$ ('# form_id'). тригер ("скидання");

Я спробував, і це працює.

Примітка. Важливо зауважити, що ці методи лише скидають форму до початкового значення, встановленого сервером при завантаженні сторінки. Це означає, що якщо ваш вхід був встановлений на значення 'встановлене значення' перед тим, як ви зробили випадкову зміну, поле буде скинуто на те саме значення після виклику методу скидання.

Сподіваюся, це допомагає


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

де editPOIFormє idатрибутом форми.


2
Буде лише колись такий, #editPOIFormі тому .each()метод не має сенсу. Навіть якщо ви додали цей ідентифікатор до декількох форм, він поверне лише один із них.
Кевін Біл

1
Кожен () дозволяє використовувати це (замість $ (це)), щоб потрапити на базовий об'єкт DOM, і викликати скидання (). Якщо припустити, що ви хочете повернутись до значень за замовчуванням, а не очищати все, це хороше рішення.
Дейв

@Dave Might також просто використовувати$('#editPOIForm').get(0).reset();
Thomas Daugaard

2
@ThomasDaugaard: за винятком того, що якщо ви використовуєте get (0) або просто $ ('# editPOIForm') [0], ви отримаєте помилку сценарію, якщо $ ('# editPOIForm') не відповідає жодним елементам, тоді як кожен () вийде з ладу без помилка. Тому я припускаю, що це залежить від ваших пріоритетів, наскільки йдеться про помилки.
Дейв


6

Тестований і перевірений код:

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

Javascript повинен бути включений, $(document).readyі він повинен відповідати вашій логіці.


5

Найпростіше і найкраще рішення -
$("#form")[0].reset();

Не використовуйте тут -
$(this)[0].reset();


Лише невелике попередження: Якщо у вас є значення за замовчуванням для входів, скажімо, серверне відображення, тоді вони form.reset();будуть скинуті до цих значень, а не очистити входи.
Evil_Bengt

4

Скажімо, якщо ви хочете очистити поля та, окрім accountType, у середньому часі спадне поле буде скинуто до певного значення, тобто "All". Залишилися поля слід скинути до порожнього, тобто текстового поля. Цей підхід буде використаний для очищення конкретні поля як наша вимога.

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

Найповніша відповідь. Дякую.
RationalRabbit

Одне запитання: як би ви скеровували це до певної форми, якби це робили програмно, а не натисканням кнопки?
RationalRabbit


3

Використовуйте цей код там, де ви хочете викликати функцію нормального скидання від jQuery

setTimeout("reset_form()",2000);

І запишіть цю функцію jQuery сайту на документ "Готовий документ"

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

3

Деякі з вас скаржилися на те, що радіостанції та інші очищені від статусу "зареєстрований" за замовчуванням ... Все, що вам потрібно зробити, це додати:.

Якщо ви не можете змусити всі інші функції скидання працювати, ця буде.

  • Адаптовано з відповіді 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 є ідентифікація форми
  2. OnSuccessоперації, яку ми називаємо функцією JavaScript з назвою " ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
  3. якщо ви зробите обидва ці права, то ви не зможете перешкодити йому працювати ...


1

У наступному коді очиститься вся форма, і поля будуть порожніми. Якщо ви хочете очистити лише певну форму, якщо сторінка має більше однієї форми, будь ласка, зазначте ідентифікатор або клас форми

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

0

Якщо я хочу очистити всі поля, крім accountType .. Використовуйте наступне

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

1
ви не хочете втрачати значення для прапорців за допомогою
радіо кнопок

0

код, який я бачу тут, і пов'язані з ним питання ЗУ здається неповним.

Скидання форми означає встановлення вихідних значень з HTML, тому я поєднав це для невеликого проекту, який я робив на основі наведеного вище коду:

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

Будь ласка, дайте мені знати, якщо я щось не пропускаю, або щось можна покращити.


0

Жоден з перерахованих вище не працює в простому випадку, коли сторінка включає в себе виклик управління веб-користувачами, що включає обробку запиту IHttpHandler (captcha). Після відправлення requsrt (для обробки зображень) наведений нижче код не очищає поля форми (перед відправкою запиту HttpHandler) все працює правильно.

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

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

0

Я написав універсальний плагін jQuery:

/**
 * 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

Додати приховану кнопку скидання наступним чином

<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

$ ('форма'). submit (функція () {

var el = $(this);

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

return false;

});

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.