Сброс многоступенчатой формы с jQuery

Что-то вроде этого? Он рекурсивно повторяет и склеивает, когда находит объект с вашим идентификатором

347
задан default locale 27 July 2014 в 23:17
поделиться

9 ответов

обновленный на марте 2012.

Так, спустя два года после того, как я первоначально ответил на этот вопрос, я возвращаюсь, чтобы видеть, что он в значительной степени превратился в большую путаницу. Я чувствую, что самое время, чтобы я возвратился к нему и сделал свой ответ действительно корректным, так как это - большая часть upvoted + принятый.

Для записи ответ Titi является неправильным, поскольку это не то, что исходный плакат, который попросили относительно - это корректно, что возможно сбросить форму с помощью собственного сброса (), метод, но этот вопрос пытается убрать форму помнивших значений, которые остались бы в форме, если Вы сбрасываете его этот путь. Поэтому необходим "ручной" сброс. Я предполагаю, что большинство людей закончило в этом вопросе от Google, ищут и действительно ищут сброс () метод, но он не работает на конкретный случай, о котором говорит OP.

Мой исходный ответ был этим:

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

Который мог бы работать на большое количество случаев, включая для OP, но, как указано в комментариях и в других ответах, очистит элементы радио/флажка от любых атрибутов значения.

Более корректный ответ (но не прекрасный):

function resetForm($form) {
    $form.find('input:text, input:password, input:file, select, textarea').val('');
    $form.find('input:radio, input:checkbox')
         .removeAttr('checked').removeAttr('selected');
}

// to call, use:
resetForm($('#myform')); // by id, recommended
resetForm($('form[name=myName]')); // by name

Используя :text, :radio, и т.д. селекторы собой считает плохой практикой jQuery, поскольку они заканчивают тем, что оценили к *:text который заставляет его взять намного дольше, чем это должно. Я действительно предпочитаю подход белого списка и жаль, что не использовал его в своем исходном ответе. Во всяком случае, путем определения input часть селектора, плюс кэш элемента формы, это должно сделать это лучшим ответом выполнения здесь.

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

495
ответ дан tfmontague 23 November 2019 в 00:28
поделиться

Метод, который я использовал на довольно большой форме (50 + поля) должен был просто перезагрузить форму с Ajax, в основном звоня назад на сервер и просто возвратив поля с их значениями по умолчанию. Сделанный намного легче, чем попытка захватить каждое поле с JS и затем установкой его к, он - значение по умолчанию. Это также позволило мне сохранять значения по умолчанию в одном месте - код сервера. На этом сайте были также некоторые различные значения по умолчанию в зависимости от настроек для учетной записи, и поэтому я не должен был волноваться об отправке их к JS. Единственная маленькая проблема, с которой я должен был иметь дело, была, некоторые предлагают поля, которые потребовали инициализации после вызова Ajax, но не грандиозного предприятия.

0
ответ дан Darryl Hein 23 November 2019 в 00:28
поделиться

Вот что-то для запущения Вас

$('form') // match your correct form 
.find('input[type!=submit], input[type!=reset]') // don't reset submit or reset
.val(''); // set their value to blank

Конечно, если у Вас будут флажки/переключатели, то необходимо будет изменить это, чтобы включать их также и установить .attr({'checked': false});

ответ Paolo редактирования более краток. Мой ответ более многословен, потому что я не знал о :input селектор, и при этом я не думал о простом удалении проверенного атрибута.

5
ответ дан Community 23 November 2019 в 00:28
поделиться

Очистка форм немного хитра и не так проста, как это смотрит.

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

14
ответ дан Cherian 23 November 2019 в 00:28
поделиться

document.getElementById ('frm'). Reset ()

14
ответ дан 23 November 2019 в 00:28
поделиться

Из http://groups.google.com/group/jquery-dev/msg/2e0b7435a864beea :

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

настройка myinput.val ('' ) может не эмулировать «сброс» на 100%, если у вас есть такой ввод:

<input name="percent" value="50"/>

Например, вызов myinput.val ('') на входе со значением по умолчанию 50 установит его в пустую строку, тогда как вызов myform.reset () сбросит ее до исходного значения 50.

390
ответ дан 23 November 2019 в 00:28
поделиться

Я обычно делаю:

$('#formDiv form').get(0).reset()

или

$('#formId').get(0).reset()
13
ответ дан 23 November 2019 в 00:28
поделиться

Я считаю, что это хорошо работает.

$(":input").not(":button, :submit, :reset, :hidden").each( function() {
    this.value = this.defaultValue;     
});
4
ответ дан 23 November 2019 в 00:28
поделиться

Рассмотрите возможность использования плагина validation - это здорово! А сбросить форму просто:

var validator = $("#myform").validate();
validator.resetForm();
5
ответ дан 23 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: