Очистить поля формы с помощью jQuery

312

Я хочу очистить все поля ввода и textarea в форме. Он работает следующим образом при использовании кнопки ввода с классом reset:

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

Это очистит все поля на странице, а не только те из формы. Как бы мой селектор выглядел как только форма, в которой живет фактическая кнопка reset?

Теги:
forms

27 ответов

390
Лучший ответ
$(".reset").click(function() {
    $(this).closest('form').find("input[type=text], textarea").val("");
});
  • 47
    Не забывайте свои поля input[type=password] .
  • 8
    это также не распространяется на галочки.
Показать ещё 8 комментариев
555

Пожалуйста, смотрите это сообщение: Сброс многоступенчатой ​​формы с помощью jQuery

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

или

$('#myform')[0].reset();
  • 3
    Первый фрагмент кода установит значения флажков на «» вместо того, чтобы просто снимать их. И это не повлияет на выбор, потому что это выбор тегов.
  • 6
    чтобы избежать удаления значений флажков, я использовал следующее, вдохновленное вашим ответом: $(':input').not(':button, :submit, :reset, :hidden').removeAttr('checked').removeAttr('selected').not(':checkbox, select').val('').removeAttr('value'); , Это удалит значения по умолчанию (то есть value="something" , но не для флажков или выбора.
Показать ещё 14 комментариев
134

По какой причине это не должно использоваться?

$("#form").trigger('reset');
  • 12
    Этот не очистит поля со значениями по умолчанию.
  • 16
    @ pythonian29033: и с вашим подходом вы сбросите ВСЕ формы на странице к значениям по умолчанию ... что, безусловно, НЕ то, чего хочет обычный разработчик. Я думаю, что разработчик jQuery должен обратить внимание на тот факт, что ему / ей нужно изменить селектор из примера кода на соответствующий ...
Показать ещё 2 комментария
57

Это не будет обрабатывать случаи, когда поля ввода формы имеют непустые значения по умолчанию.

Что-то вроде должно работать

$('yourdiv').find('form')[0].reset();
  • 0
    Я просто получил код js из моего первого поста и хочу, чтобы он работал на каждой странице с несколькими кнопками сброса в нескольких формах. Так что это просто селектор, который нуждается в некотором вкладе.
42

если вы используете селекторы и делаете значения пустыми значениями, это не сбрасывает форму, делая все поля пустыми. Reset заключается в том, чтобы сделать форму, как это было до любых действий по редактированию от пользователя после загрузки формы со стороны сервера. Если есть вход с именем "имя пользователя" и что имя пользователя было предварительно заполнено со стороны сервера, большинство решений на этой странице будут удалять это значение из ввода, а не Reset, до значения, которое было до изменения пользователя. Если вам нужна форма Reset, используйте следующую команду:

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

если вам не нужна форма Reset, но заполните все входы некоторым значением, например пустым значением, тогда вы можете использовать большинство решений из других комментариев.

27

Простой, но работает как шарм.

$("#form").trigger('reset'); //jquery
document.getElementById("myform").reset(); //native JS
  • 14
    За исключением того, что это не очищает поля. Это устанавливает их по умолчанию.
25

Если кто-то все еще читает этот поток, вот самое простое решение, использующее не jQuery, а обычный JavaScript. Если ваши поля ввода находятся внутри формы, существует простая команда JavaScript reset:

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

Подробнее об этом здесь: http://www.w3schools.com/jsref/met_form_reset.asp

Ура!

  • 4
    Это также не очистит поля со значениями по умолчанию.
  • 0
    Как говорится. Он сбрасывает в первоначальное значение формы и не очищает значения. Но да, если вы загрузили форму со значениями по умолчанию, они не будут очищены. Вероятно, цикл JS, который проходит через все входы и очищает их
21
$('form[name="myform"]')[0].reset();
15

Почему это нужно делать с любым 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
    Сначала попробовал, он не очистит поля со значениями по умолчанию.
  • 0
    Таким образом, вы хотите сдуть значения по умолчанию? Смотрите мое редактирование.
Показать ещё 2 комментария
11

Я получил самый легкий трюк в форме reset

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

или

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

Если вы хотите очистить все поля ввода независимо от их типа, то это минутный шаг на

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

С помощью Javascript вы можете просто сделать это с помощью этого синтаксиса getElementById("your-form-id").reset();

вы также можете использовать jquery, вызвав функцию reset таким образом $('#your-form-id')[0].reset();

Помните, не забывайте [0]. Вы получите следующую ошибку, если

TypeError: $(...). reset не является функцией

JQuery также предоставляет событие, которое вы можете использовать

$( '# form_id') триггер ( "reset" );.

Я пробовал, и он работает.

Примечание. Важно отметить, что эти методы только reset составляют вашу форму до их первоначального значения, заданного сервером при загрузке страницы. Это означает, что если ваш ввод был установлен на значение "установленное значение" перед случайным изменением, поле будет reset до того же значения после вызова метода reset.

Надеюсь, что это поможет

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

где editPOIForm - это атрибут id вашей формы.

  • 2
    Всегда будет только одна #editPOIForm поэтому метод .each() не имеет смысла. Даже если вы добавите этот идентификатор к нескольким формам, он вернет только одну из них.
  • 1
    Функция each () позволяет вам использовать this (вместо $ (this)), чтобы получить доступ к базовому объекту DOM, и вызывать reset (). Предполагая, что вы хотите сбросить значения по умолчанию, вместо того, чтобы очистить все, это хорошее решение.
Показать ещё 2 комментария
5

Протестированный и проверенный код:

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

Javascript должен быть включен в $(document).ready, и он должен быть с вашей логикой.

5

Почему вы не используете document.getElementById("myId").reset();? это простой и красивый

3

Я использую это:

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

И вот моя кнопка:

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

Скажем, если вы хотите очистить поля и за исключением типа accountType, в раскрывающемся списке времени будет reset до определенного значения, то есть "All'.Remaining fields должно быть reset для пустого, т.е. текстового поля. Этот подход будет использоваться для очистки определенных полей в качестве нашего требования.

 $(':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';
     }
 });
  • 0
    Самый полный ответ. Благодарю.
  • 0
    Один вопрос: как бы вы направили это к определенной форме, если бы вы делали это программно, а не нажатием кнопки?
1
@using (Ajax.BeginForm("Create", "AcceptanceQualityDefect", new AjaxOptions()
{
    OnSuccess = "ClearInput",
    HttpMethod = "Post",
    UpdateTargetId = "defect-list",
    InsertionMode = InsertionMode.Replace
}, new { @id = "frmID" })) 
  • frmID - это идентификация формы
  • OnSuccess операции, которую мы называем функцией JavaScript с именем "ClearInput"

    <script type="text/javascript">
        function ClearInput() {
            //call action for render create view
            $("#frmID").get(0).reset();
        }
    </script>
    
  • если вы сделаете оба этих права, вы не сможете остановить его от работы...

1

Используйте этот код, где вы хотите вызывать Normal Reset Функция jQuery

setTimeout("reset_form()",2000);

И напишите эту функцию на сайте jQuery в готовом документе

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

Самое простое и лучшее решение -
$("#form")[0].reset();

Не используйте здесь -
$(this)[0].reset();

0

Следующий код очищает всю форму, и поля будут пустыми. Если вы хотите удалить только конкретную форму, если страница имеет более одной формы, укажите номер или класс формы

$("body").find('form').find('input,  textarea').val('');
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>
0

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

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

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

код, который я вижу здесь, и связанные с ним вопросы SO кажутся неполными.

Сброс формы означает установку исходных значений из 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

Если я хочу очистить все поля, кроме accountType... Используйте следующие

$q(':input','#myform').not('#accountType').val('').removeAttr('checked').removeAttr('selected');
  • 1
    Вы не хотите терять значения для флажков в радиокнопках, а только снимать их, это не хорошее решение
-2

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

var el = $(this);

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

return false;

});

-3

Добавьте скрытую reset кнопку следующим образом

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню