Как сбросить форму, используя jQuery с методом .reset ()


270

У меня был рабочий код, который мог сбросить форму, когда я нажимал кнопку сброса. Однако после того, как мой код становится длиннее, я понимаю, что он больше не работает.

 <div id="labels">
        <table class="config">
            <thead>
                <tr>
                    <th colspan="4"; style= "padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Control Buttons Configuration</th>
                </tr>
                <tr>
                    <th>Index</th>
                    <th>Switch</th>
                    <th>Response Number</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>

                <form id="configform" name= "input" action="#" method="get">
                <tr><td style="text-align: center">1</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" value="" id="number_one"></td>
                    <td><input style="background: white; color: black;" type="text"  id="label_one"></td>
                </tr>
                <tr>
                    <td style="text-align: center">2</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id = "number_two" value=""></td>
                    <td><input style="background: white; color: black;" type="text"  id = "label_two"></td>
                </tr>
                <tr>
                    <td style="text-align: center">3</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_three" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td style="text-align: center">4</td>
                    <td><img src= "static/switch.png" height="100px" width="108px"></td>
                    <td id="small"><input style="background: white; color: black;" type="text" id="number_four" value=""></td>
                    <td><input style="background: white; color: black;" type="text" id="label_three"></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" id="configsubmit" value="Submit"></td>
                </tr>
                <tr>
                    <td><input type="reset" id="configreset" value="Reset"></td>
                </tr>

                </form>
            </tbody>
        </table>

    </div>

И мой JQuery:

 $('#configreset').click(function(){
            $('#configform')[0].reset();
 });

Есть ли какой-то источник, который я должен включить в мои коды, чтобы .reset()метод работал? Ранее я использовал:

<script src="static/jquery.min.js">
</script>
<script src="static/jquery.mobile-1.2.0.min.js">
</script>

и .reset()метод работал.

В настоящее время я использую

<script src="static/jquery-1.9.1.min.js"></script>      
<script src="static/jquery-migrate-1.1.1.min.js"></script>
<script src="static/jquery.mobile-1.3.1.min.js"></script>

Может ли это быть одной из причин?


Можете ли вы привести пример не работает? сбрасывается ли какое-либо из полей?
Арун П Джонни

это что-то вроде этого, но здесь работает нормально jsfiddle.net/chJ8B :( возможно, из-за других частей скрипта? но у меня есть только 1 форма
yvonnezoe

у меня вопрос, не сбрасывается ли ни одно поле / некоторые из них работают
Арун П. Джонни

13
Ваш HTML неверен . Форма не может быть дочерней по отношению к элементу TBODY, а TR не может быть дочерней по отношению к элементу FORM. Поместите теги формы вне таблицы (т.е. поместите таблицу в форму). Вполне возможно, что форма перемещается за пределы таблицы, но элементы управления формой остаются в ячейках, поэтому они больше не находятся в форме.
RobG

@RobG: О, хороший момент! Я попробую это. Спасибо! я мог бы пропустить этот полезный комментарий, если бы не вернулся сюда, чтобы получить свою скриптовую ссылку: s
yvonnezoe

Ответы:


464

Вы можете попробовать использовать ссылку () Ссылка

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

2
Просто волшебно и прямо вперед! Очень признателен за обмен.
Аджай Кумар

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

Я использую $ ('. Profile_img_form'). Trigger ('reset'); Я добавил в свою форму именованный класс profile_img_form, а затем вызвал его. он не сбрасывает мою форму и возвращает сообщение об ошибке, например Uncaught SyntaxError: Недопустимое регулярное выражение: /(^|\.)bs\.(?:.*\.|)fileinput(\.|$)/: Пожалуйста, предложите, что это вопрос. Спасибо.
Kamlesh

@Kamlesh это должно сработать, я создал демо для вас, нажмите на jsfiddle.net/Lkt4eq9y/2
SagarPPanchal

1
Спасибо за ответ. Сохраненные часы Googling / SO'ing :)
Анджана Силва

276

http://jsfiddle.net/8zLLn/

  $('#configreset').click(function(){
        $('#configform')[0].reset();
  });

Поместите это в скрипку JS. Работал как задумано.

Таким образом, ни один из вышеупомянутых вопросов не виноват здесь. Может быть, у вас конфликтующая проблема с удостоверением личности? Клик действительно выполняется?

Изменить: (потому что я грустный мешок без должных комментариев) Это не проблема напрямую с вашим кодом. Он отлично работает, когда вы вынимаете его из контекста страницы, которую вы используете в данный момент, поэтому вместо того, чтобы быть чем-то с конкретными jQuery / javascript и атрибутивными данными формы, это должно быть что-то другое. Я бы начал разбивать код на части и пытаться выяснить, где он происходит. Я имею в виду, просто чтобы "убедиться", я полагаю, вы могли бы ...

console.log($('#configform')[0]);

в функции щелчка и убедитесь, что он нацелен на правильную форму ...

и если это так, это должно быть что-то, что не указано здесь.

изменить часть 2: Одна вещь, которую вы можете попробовать (если она не нацелена правильно), это использовать «input: reset» вместо того, что вы используете ... также, я бы посоветовал, потому что это не цель, которая неправильно работает, чтобы выяснить, на что нацелен настоящий клик. Просто откройте инструменты Firebug / Developer, что у вас есть, бросить в

console.log($('#configreset'))

и посмотреть, что всплывает. и тогда мы можем идти оттуда.


нет конфликтующих ID :( я пытаюсь выбрать слой за слоем и проверить, работает ли щелчок
yvonnezoe

1
хм, похоже, что щелчок не работает! я добавил $('#ptest').html("clicked reset")в клик (function () {}); где должно отображаться «нажатие сброса», но оно не отображается
yvonnezoe

У меня есть вопрос здесь. каждый раз, когда я использую console.log, я понятия не имею, где его искать. Я использую Python IDLE и терминал для запуска скрипта Python. в этом есть JavaScript в любом случае, когда я использую `alert ($ ('# configform') [0]), он дает мне [object HTMLFormElement]
yvonnezoe

1
Попробуйте использовать alert (JSON.stringify ($ '# configform') [0])). Оповещение не особо заботится о красивых объектах печати (или о том, что там находится). Это просто позволяет вам знать, что это объект.
FullOnFlatWhite

1
@DylanChensky магия jQuery в том, что все это множество (массив). Так же, как если бы вы использовали обычный массив в jQuery, вы [0]выбираете первый элемент. Но в jQuery он выбирает фактический html элемента. Таким образом, [0]дает вам HTML, который позволяет вам вызывать HTML, а не JQuery, вызываемый метод reset. Смотрите ответ @kevin ниже для получения дополнительной информации.
FullOnFlatWhite

110

Согласно этому сообщению здесь , Jquery не имеет reset()методы; но родной JavaScript делает. Итак, преобразуйте элемент jQuery в объект JavaScript, используя:

$("#formId")[0].reset()
// or
$("#formId").get(0).reset()

1
Это работает, и я согласен, у jQuery нет метода reset (). Вы можете увидеть, как это сделать с помощью собственного JavaScript, на w3school doc: w3schools.com/jsref/met_form_reset.asp
serfer2

2
Я хотел бы отметить, что это только сбросит форму, но не очистит ее. Т.е., если в форме были значения, отправленные с запросом, они будут восстановлены.
Защитник один

Я хотел бы добавить комментарий относительно заполнителя, начального отображения формы, элементы формы имеют значения заполнителя, после этого сброса независимо от того, отображается ли заполнитель снова, но значение становится пустым, поэтому будьте внимательны при проверке формы. Я добавил стандартную форму проверки, чтобы проверить значение заполнителя по умолчанию.
Рамратан Гупта

48

Это одна из тех вещей, которые на самом деле легче сделать в ванильном Javascript, чем в jQuery. У jQuery нет resetметода, но есть элемент формы HTML, поэтому вы можете сбросить все поля в форме следующим образом:

document.getElementById('configform').reset();

Если вы сделаете это с помощью JQuery (как показано в других ответах здесь: $('#configform')[0].reset()), то [0]это извлечение ту же форму DOM элемент , который вы получите непосредственно через document.getElementById. Последний подход является одновременно более эффективным и более простым (поскольку с помощью подхода jQuery вы сначала получаете коллекцию, а затем должны извлечь из нее элемент, тогда как с ванильным Javascript вы просто получаете элемент напрямую).


23

Кнопка сброса вообще не нуждается в каком-либо скрипте (или имени или идентификаторе):

<input type="reset">

и вы сделали. Но если вам действительно нужно использовать скрипт, обратите внимание, что каждый элемент управления формы имеет свойство формы, которое ссылается на форму, в которой он находится, так что вы можете сделать:

<input type="button" onclick="this.form.reset();">

Но кнопка сброса - намного лучший выбор.


ты имеешь в виду, просто подойдет эта строка? oO так мой HTML выше правильно?
Ивоннезо

Определить «не работает». Какая у вас ошибка? Что не работает? Кнопки сброса всегда были частью HTML-форм, они работают.
RobG

1
«не работает» - ничего не сбрасывается, никаких изменений не было видно в форме.
Ивоннезо

1
Стоит отметить, что «сброс» не означает «моя форма очищена». На самом деле семантика «reset» возвращает все элементы «form» обратно к их исходным атрибутам «value». Это смутило меня как минимум на несколько минут!
jocull

@ jocull - когда все остальное терпит неудачу, всегда есть версия HTML стандарта W3C или WHATWG . ;-)
RobG

21

Я наконец-то решил проблему !! @RobG был прав насчет formтега и tableтега. тег должен быть размещен за пределами стола. с этим,form

<td><input type="reset" id="configreset" value="Reset"></td>

работает без необходимости jquery или чего-либо еще. просто нажмите на кнопку и тадаа ~ вся форма сбрасывается;) блестяще!


3
Обычно вы можете подтвердить, что это происходит, проверяя исходный код (не просматривая исходный код страницы, поскольку он покажет, что было сгенерировано, а скорее используя что-то вроде Developer Tools <kbd> F12 </ kbd>), который показывает вам «что за браузер видит "- в этом случае он покажет вам (по крайней мере в Chrome), что formтег был автоматически закрыт в начале tbody, исключая элементы ввода.
drzaus



13

С помощью функции jquery .closest (element) и .find (...) .

Получение родительского элемента и поиск дочернего элемента .

Наконец, сделайте нужную функцию.

$("#form").closest('form').find("input[type=text], textarea").val("");

4
Хотя этот блок кода может ответить на вопрос, вы всегда должны предоставить объяснение, почему это происходит.
Саша Вольф

1
$("#form").find("input[type=text], textarea").val("");я сделал этот путь
Бира

11

Первая строка сбросит входные данные формы

$('form#myform').trigger("reset"); //Line1
$('form#myform select').trigger("change"); //Line2

Второй сбросит select2

Необязательно: Вы можете использовать это, если у вас есть разные типы, зарегистрированные с разными событиями

$('form#myform select, form input[type=checkbox]').trigger("change"); //Line2

5

Быстрый сброс полей формы возможен с помощью этой функции сброса jQuery.

когда вы получите успешный ответ, стреляйте ниже кода.

$(selector)[0].reset();


4

Вы можете просто добавить тип ввода = сброс с помощью id = resetform, как это

<html>
<form>
<input type = 'reset' id = 'resetform' value = 'reset'/>
<!--Other items in the form can be placed here-->
</form>
</html>

затем с помощью jquery вы просто используете функцию .click () для элемента с id = resetform следующим образом

<script> 
$('#resetform').click();
</script>

и форма сбрасывается Примечание. Вы также можете скрыть кнопку сброса с помощью id = resetform, используя вашу CSS

<style>
#resetform
{
display:none;
}
</style>

Не забывайте скрывать это ... чтобы сделать его более современной формой. <input type = 'reset' id = 'resetform' value = 'reset' / style = 'display: none;'>
mangas

3

Вот простое решение с Jquery. Это работает во всем мире. Посмотрите на код.

$('document').on("click", ".clear", function(){
   $(this).closest('form').trigger("reset");
})

Добавьте чистый класс к кнопке в каждой форме, вам нужно ее сбросить. Например:

<button class="button clear" type="reset">Clear</button>

3

У jQuery нет reset()метода; но родной JavaScript делает. Итак, преобразуйте элемент jQuery в объект JavaScript, используя:

$("#formId")[0].reset();

$("#formId").get(0).reset();

Мы можем просто использовать код Javascript

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

2
<button type="reset">Reset</reset>

Простейший способ, которым я могу думать, это надежно. Поместите в тег формы.


1

Вы можете использовать следующее.

@using (Html.BeginForm("MyAction", "MyController", new { area = "MyArea" }, FormMethod.Post, new { @class = "" }))
{
<div class="col-md-6">
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">
        @Html.LabelFor(m => m.MyData, new { @class = "col-form-label" })
    </div>
    <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
        @Html.TextBoxFor(m => m.MyData, new { @class = "form-control" })
    </div>
</div>
<div class="col-md-6">
    <div class="">
        <button class="btn btn-primary" type="submit">Send</button>
        <button class="btn btn-danger" type="reset"> Clear</button>
    </div>
</div>
}

Затем очистите форму:

    $('.btn:reset').click(function (ev) {
        ev.preventDefault();
        $(this).closest('form').find("input").each(function(i, v) {
            $(this).val("");
        });
    });

Кажется, здесь много специфичного для фреймворка кода. Я рекомендую избегать таких вещей при ответе на вопросы о SO, поскольку в вопросе не указано, что они используют какую-либо инфраструктуру, кроме jQuery
Lazerbeak12345,

0

Ваш код должен работать. Убедитесь, что static/jquery-1.9.1.min.jsсуществует. Кроме того, вы можете попробовать вернуться к static/jquery.min.js. Если это решит проблему, то вы точно ее определили.


Единственная проблема, о которой я могу подумать, это то, что у вас есть другая форма с таким же идентификатором ( configform). Вы должны сделать некоторое исследование с помощью консоли. Сначала попробуйте $. Если вы используете Chrome, ввод $в консоли активирует контекстно-зависимый список, если загружен jQuery. Если вы наберете $и нажмете « возврат», он будет выполнять функцию, если загружен jQuery. Следующая попытка $("#configform"). Нажмите правой кнопкой мыши на результат и выберите Reveal in Elements panel.
ic3b3rg

спасибо :) но у меня нет хрома. это то же самое, чтобы сделать это с помощью firebug? (Я установил его, но никогда не использовал его)
yvonnezoe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.