JQuery - сброс формы - исключить поле «Выбрать» - PullRequest
8 голосов
/ 05 января 2010

All

Я могу сбросить все элементы формы, используя следующий синтаксис JQuery:

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

Как я могу изменить это, чтобы исключить сброс значений «select box»?

Спасибо

Ответы [ 4 ]

10 голосов
/ 05 января 2010

Каждому ..

функция сброса не устанавливает все в '' (пустая строка)

сбрасывается до их начальных значений .. (сохраняется в атрибуте значения или выбранной опции и т.

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

  1. получить все элементы <select>
  2. получить их текущие выбранные значения
  3. сбросить форму, как вы сейчас делаете
  4. сбросить выбранный

пример:

<script type="text/javascript">
  $(document).ready(
  function(){
   $("#resetbutton").click(
    function(){
     var values = [];
     var selected = $("select").each(
      function(){
       values.push( $(this).val());
       });
     this.form.reset();
     for (i=0;i<selected.length;i++)
      $(selected[i]).val(values[i]);
    });
    }
  );
 </script>
6 голосов
/ 05 января 2010

Это не jQuery, это родной javascript. [0] выявляет фактический элемент DOM, поэтому он такой же, как:

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

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

$('#myform :text').val('');

Вы можете увидеть все селекторы форм здесь: http://docs.jquery.com/Selectors

0 голосов
/ 26 июня 2012

По какой-то причине Дэвид ошибся при правильном ответе на мой Google Chrome js. Это говорит:

Uncaught TypeError: Свойство 'reset' объекта # не является функцией

... поэтому я решил попробовать немного другое решение:

  • Дайте родным атрибутам кнопок сброса браузера «скрытый» и установите «id»:

<input id="resetbutton" type="reset" style="visibility:hidden;" name="reset" value="reset" />

  • Инициировать JQuery-событие "click" на кнопке сброса при нажатии на ссылку:

<a href="#" onclick="$('#resetbutton').click();">Reset</a>

0 голосов
/ 05 января 2010

Вы можете сделать искусственный сброс, установив значения в пустую строку и сбросив флажки, используя ответ Дэвида (или этот более полный ). Вы также можете попытаться сохранить значение каждого элемента select до сброса формы, а затем восстановить значения после:

var myform = $('#myform');
var selects = $('select', myform);

// Store each current value
selects.each(function() {
    $(this).data('previous', $(this).val()); 
});

myform[0].reset();

// Restore the values
selects.each(function() {
    $(this).val($(this).data('previous')); 
});
...