Сброс значение Select2 в выпадающем списке с кнопкой сброса
каким будет лучший способ сбросить выбранный элемент по умолчанию? Я использую Select2 библиотеки и при использовании обычной кнопки type="reset"
, значение в раскрывающемся списке не сбрасывается.
поэтому, когда я нажимаю кнопку, Я хочу, чтобы" все " было показано снова.
jQuery
$("#d").select2();
HTML-код
<select id="d" name="d">
<option selected disabled>All</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
14 ответов
Я бы попробовал что-то вроде этого:
$(function(){
$("#searchclear").click(function(){
$("#d").select2('val', 'All');
});
});
вы также можете сбросить значение select2 с помощью
$(function() {
$('#d').select2('data', null)
})
также вы можете пройти 'allowClear': true
при вызове select2 и он будет иметь кнопку X для сброса его значения.
согласно последней версии (select2 3.4.5) документировано здесь, это будет так:
$("#my_select").select2("val", "");
версия 4.0
$('#d').val('').trigger('change');
это правильное решение отныне в соответствии с устаревшим сообщением, брошенным в режиме отладки:
- The select2("val")
метод устарел и будет удален в более поздних версиях Select2. Использовать $element.val()
вместо"
вы можете использовать:
$("#d").val(null).trigger("change");
это очень просто и работает правильно! Если использовать с кнопкой сброса:
$('#btnReset').click(function() {
$("#d").val(null).trigger("change");
});
лучший способ сделать это:
$('#e1.select2-offscreen').empty(); //#e1 : select 2 ID
$('#e1').append(new Option()); // to add the placeholder and the allow clear
Я вижу три проблемы:
- отображение элемента управления Select2 не обновляется при изменении его значения из-за сброса формы.
- опция " Все " не имеет .
- опция" Все " отключена.
во-первых, я рекомендую вам использовать setTimeout
функция для обеспечения выполнения кода после завершения сброса формы.
вы можете выполнить код, когда кнопка щелчок:
$('#searchclear').click(function() {
setTimeout(function() {
// Code goes here.
}, 0);
});
или когда форма сбрасывается:
$('form').on('reset', function() {
setTimeout(function() {
// Code goes here.
}, 0);
});
что касается того, какой код использовать:
поскольку параметр " все " отключен, сброс формы не делает его выбранным значением. Поэтому вы должны явно установить, что это выбранное значение. Способ сделать это-с помощью функции Select2 "val". И поскольку "все" не было!--6--> атрибут, его значение совпадает с его текстом, который является "все". Поэтому, вы должны используйте код, заданный thtsigma в выбранном ответе:
$("#d").select2('val', 'All');
если атрибут value=""
должны быть добавлены к опции "все", тогда вы можете использовать код, данный Даниэлем денером:
$("#d").select2('val', '');
если опция " Все " не была отключена, то вам просто нужно будет заставить Select2 обновиться, и в этом случае вы можете использовать:
$('#d').change();
Примечание: следующий код Lenart-это способ очистить выбор, но это не приводит к тому, что опция "Все выбрано:
$('#d').select2('data', null)
Если у вас есть заполненный виджет выбора, например:
<select>
<option value="1">one</option>
<option value="2" selected="selected">two</option>
<option value="3">three</option>
...
вы хотите убедить select2 восстановить первоначально выбранное значение при сбросе, аналогично тому, как работает собственная форма. Для этого сначала сбросьте родную форму, а затем обновите select2:
$('button[type="reset"]').click(function(event) {
// Make sure we reset the native form first
event.preventDefault();
$(this).closest('form').get(0).reset();
// And then update select2 to match
$('#d').select2('val', $('#d').find(':selected').val());
}
то, что я нашел, хорошо работает следующим образом:
Если у вас есть опция заполнителя, такая как " все " или " - Select -", и его первый вариант, и это то, что вы хотите установить значение, когда вы "сбрасываете", вы можете использовать
$('#id').select2('val',0);
0-это, по сути, опция, которую вы хотите установить на сброс. Если вы хотите установить его в последний вариант, то получите длину опций и установите ее в длину - 1. В основном используйте индекс любой опции, которую вы хотите установить значение select2 в on сброс.
Если у вас нет заполнителя и вы просто не хотите, чтобы текст отображался в поле, используйте:
$('#id').select2('val','');
для достижения общего решения, почему бы не сделать это:
$(':reset').live('click', function(){
var $r = $(this);
setTimeout(function(){
$r.closest('form').find('.select2-offscreen').trigger('change');
}, 10);
});
таким образом: Вам не придется создавать новую логику для каждого select2 в вашем приложении.
и вам не обязательно знать значение по умолчанию (которое, кстати, не обязательно должно быть ""
или даже первый вариант)
и, наконец, значение :selected
не всегда достигнет истинного сброса, так как текущий избранные вполне могло быть установлено программно на клиент, тогда как действие по умолчанию form select
- это возврат значений входных элементов на отправленные сервером.
EDIT:
В качестве альтернативы, учитывая устаревший статус live
, мы могли бы заменить первую строку на это:
$('form:has(:reset)').on('click', ':reset', function(){
или еще лучше:
$('form:has(:reset)').on('reset', function(){
PS: я лично чувствую, что сброс на сброс, а также запуск blur
и focus
события, прикрепленные к исходному select, являются некоторыми из самые заметные "отсутствующие" функции в select2!
Select2 использует определенный класс CSS, поэтому простой способ сбросить его:
$('.select2-container').select2('val', '');
и у вас есть преимущество, если у вас есть несколько Select2 в одной форме, все они будут сброшены с помощью этой одной команды.
иногда я хочу сбросить Select2, но я не могу без метода change (). Поэтому мое решение:
function resetSelect2Wrapper(el, value){
$(el).val(value);
$(el).select2({
minimumResultsForSearch: -1,
language: "fr"
});
}
использование :
resetSelect2Wrapper("#mySelectId", "myValue");
для меня он работает только с любым из этих решений
$(this).select2('val', null);
или
$(this).select2('val', '');
// Store default values
$('#filter_form [data-plugin="select2"]').each(function(i, el){
$(el).data("seldefault", $(el).find(":selected").val());
});
// Reset button action
$('#formresetbtn').on('click', function() {
$('#filter_form [data-plugin="select2"]').each(function(i, el){
$(el).val($(el).data("seldefault")).trigger('change');
});
});