2010-10-03 2 views
6

Я нашел код онлайн, чтобы очистить форму, но у нее ничего не было для выбора. С jquery я попытался добавить код, чтобы выбрать параметр по умолчанию в поле выбора, когда я перезагружаю форму. Я решил, что единственный способ найти значение по умолчанию - искать, где была опция SELECTED. Затем я обнаружил, что когда пользователь выбирает что-то еще, jquery не видит выбранный по умолчанию, а что касается новой опции, которую выбрал пользователь.Найти выбранную по умолчанию выбранную в теге HTML select?

Как мне найти опцию по умолчанию в форме, чтобы я мог ее правильно очистить?

//http://www.learningjquery.com/2007/08/clearing-form-data 
$.fn.clearForm = function() { 
    return this.each(function() { 
     var type = this.type, tag = this.tagName.toLowerCase(); 
     if (tag == 'form') 
      return $(':input', this).clearForm(); 
     if (type == 'text' || type == 'password' || tag == 'textarea') 
      this.value = ''; 
     else if (type == 'checkbox' || type == 'radio') 
      this.checked = false; 
     else if (tag == 'select') { 
      //alert($('option', this).size()); 
      alert($('option[selected]', this).val()); 
     } 
    }); 
}; 

ответ

2

Обычно по умолчанию в <select> первый <option>, так что вы можете сделать:

$(this).find("option:first").attr("selected", true); 

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

if (tag == 'form') 
    this.reset(); 

Я не уверен, что это белый у вас действительно после, но просто выбросив его там. Часто собственные методы DOM уже очень удобны, не игнорируйте их!

+0

Я говорю о том, когда в html у вас есть список из 5 вещей, и html-автор пишет SELECTED в одном из вариантов в источнике HTML. который может быть последним. 2-й, 2-й и т. Д. Если этот код был сгенерирован, я бы включил некоторые JS-вары для моего внешнего JS-файла, но, к сожалению, html не генерируется. – 2010-10-03 11:24:00

+1

@ acidzombie24 - В этом случае '.reset()' похоже на то, что вы хотите ... он сбрасывает все '

' на то, что было на загрузке страницы, включая первоначально выбранный '
+0

Я не уверен, почему я не мог использовать эту функцию, но похоже, что она делает то, что я хочу. (я дам вам знать здесь, я думаю, если я даже столкнулся с проблемой). Как очистить его с помощью jquery? Я тестировал эту '$ (« форму ») [0].reset(); 'однако замена' $ ("form") [0] 'с' $ (this) 'и' $ (this) .get() 'получает ошибку. Использование Chrome «Uncaught TypeError: Object [object HTMLFormElement] не имеет метода 'reset'" – 2010-10-03 11:55:17

11

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

$(this).val($(this).find('option[selected]').val()); 

option[selected] получит "жёстко прописанный" выбранный вариант (ы) (по умолчанию). option:selected, напротив, получит выбранные в данный момент варианты.

Это будет работать для одного выбирает, мульти выбирает требуют иного подхода:

$(this).find('option').each(function(i, opt) { 
    opt.selected = opt.defaultSelected; 
}); 

Это делает работу для отдельных выбирает, тоже.

2

Я обнаружил, что ответ Корактора не работал в IE8 и ниже. Я решил его, итерации опций до тех пор, пока не найду выбранный по умолчанию вариант:

var defaultValue; 
$(this).find('option').each(function (i, o) { 
    if (o.defaultSelected) { 
    defaultValue = o.value; 
    return; 
    } 
}); 

Менее элегантный, но работает в IE.

2

Ответ Koraktor тоже не работал для меня в Chrome, и я не мог использовать form.reset(), потому что хотел сбросить подмножество формы. Я обнаружил, что проще всего было сделать выбор значения defaultValue при загрузке страницы, а затем функция сброса работает с использованием той же строки для всех элементов, возвращаемых селектором:.

$("#top1 select").each(function() { 
     this.defaultValue = $(this).val(); 
    }); 

    $(".reset").click(function() { 
     $('#top1 :input').each(function() { 
      $(this).val(this.defaultValue); 
     }); 
    }); 
Смежные вопросы