Как сбросить форму, используя 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>

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

yvonnezoe
источник
Можете ли вы привести пример не работает? сбрасывается ли какое-либо из полей?
Арун П Джонни
это что-то вроде этого, но здесь работает нормально jsfiddle.net/chJ8B :( возможно, из-за других частей скрипта? но у меня есть только 1 форма
yvonnezoe
у меня вопрос, не сбрасывается ли ни одно поле / некоторые из них работают
Арун П. Джонни
13
Ваш HTML неверен . Форма не может быть дочерней по отношению к элементу TBODY, а TR не может быть дочерней по отношению к элементу FORM. Поместите теги формы вне таблицы (т.е. поместите таблицу в форму). Вполне возможно, что форма перемещается за пределы таблицы, но элементы управления формой остаются в ячейках, поэтому они больше не находятся в форме.
RobG
@RobG: О, хороший момент! Я попробую это. Спасибо! я мог бы пропустить этот полезный комментарий, если бы не вернулся сюда, чтобы получить свою скриптовую ссылку: s
yvonnezoe

Ответы:

464

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

$('#form_id').trigger("reset");
SagarPPanchal
источник
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'))

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

FullOnFlatWhite
источник
нет конфликтующих 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()
Kevin
источник
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();">

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

RobG
источник
ты имеешь в виду, просто подойдет эта строка? 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 или чего-либо еще. просто нажмите на кнопку и тадаа ~ вся форма сбрасывается;) блестяще!

yvonnezoe
источник
3
Обычно вы можете подтвердить, что это происходит, проверяя исходный код (не просматривая исходный код страницы, поскольку он покажет, что было сгенерировано, а скорее используя что-то вроде Developer Tools <kbd> F12 </ kbd>), который показывает вам «что за браузер видит "- в этом случае он покажет вам (по крайней мере в Chrome), что formтег был автоматически закрыт в начале tbody, исключая элементы ввода.
drzaus
проверить совместимость: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/reset
Диего Авила
13

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

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

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

$("#form").closest('form').find("input[type=text], textarea").val("");
aldrien.h
источник
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>
Chuksy
источник
Не забывайте скрывать это ... чтобы сделать его более современной формой. <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>

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

luminancedesign
источник
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("");
        });
    });
RainyTears
источник
Кажется, здесь много специфичного для фреймворка кода. Я рекомендую избегать таких вещей при ответе на вопросы о SO, поскольку в вопросе не указано, что они используют какую-либо инфраструктуру, кроме jQuery
Lazerbeak12345,
0

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

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