Сбросить значение select2 и показать заполнитель
Как я могу установить заполнитель на сброс значения с помощью select2. В моем примере, если щелкнуты поля выбора местоположения или класса, и мой select2 имеет значение, чем значение select2 должно сбросить и показать заполнитель по умолчанию. Этот скрипт сбрасывает значение, но не показывает заполнитель
$("#locations, #grade ").change(function() {
$('#e6').select2('data', {
placeholder: "Studiengang wählen",
id: null,
text: ''
});
});
$("#e6").select2({
placeholder: "Studiengang wählen",
width: 'resolve',
id: function(e) {
return e.subject;
},
minimumInputLength: 2,
ajax: {
url: "index.php?option=com_unis&task=search.locator&tmpl=component&<?php echo JSession::getFormToken() ?>=1",
dataType: 'json',
data: function(term, page) {
return {
q: term, // search term
g: $('#grade option:selected').val(),
o: $('#locations option:selected').val()
};
},
results: function(data, page) {
return {
results: data
};
}
},
formatResult: subjectFormatResult,
formatSelection: subjectFormatSelection,
dropdownCssClass: "bigdrop",
escapeMarkup: function(m) {
return m;
}
});
29 ответов:
вы должны определить select2 как
$("#customers_select").select2({ placeholder: "Select a customer", initSelection: function(element, callback) { } });чтобы сбросить select2
$("#customers_select").select2("val", "");
Select2 изменил свой API:
Select2: The
select2("val")метод устарел и будет удален в более поздних версиях Select2. Используемый элемент.функция val() вместо этого.лучший способ сделать это сейчас:
$('#your_select_input').val('');Изменить: Декабрь 2016 комментарии предполагают, что ниже-это обновленный способ сделать это:
$('#your_select_input').val([]);
принятый ответ не работает в моем случае. Я пытаюсь это сделать, и это работает:
определить select2:
$("#customers_select").select2({ placeholder: "Select a State", allowClear: true });или
$("#customers_select").select2({ placeholder: "Select a State" });для сброса:
$("#customers_select").val('').trigger('change')или
$("#customers_select").empty().trigger('change')
единственное, что может работать для меня-это:
$('select2element').val(null).trigger("change")Я использую версию 4.0.3
ссылка
Select2 использует определенный класс CSS, поэтому простой способ сбросить его:
$('.select2-container').select2('val', '');и у вас есть преимущество, если у вас есть несколько Select2 в той же форме, все они будут сброшены с этим единым командованием.
ЧТОБЫ УДАЛИТЬ ВЫБРАННОЕ ЗНАЧЕНИЕ
$('#employee_id').select2('val','');
ЧТОБЫ ОЧИСТИТЬ ЗНАЧЕНИЯ ПАРАМЕТРОВ
$('#employee_id').html('');
Я знаю, что это старый вопрос, но это работает для select2 версии 4.0
$('#select2-element').val('').trigger('change');или
$('#select2-element').val('').trigger('change.select2');Если у вас есть изменения событий, связанных с ним
во-первых, вы должны определить select2 такой:
$('#id').select2({ placeholder: "Select groups...", allowClear: true, width: '100%', })сбросить select2, просто вы можете использовать следующий блок кода:
$("#id > option").removeAttr("selected"); $("#id").trigger("change");
вы можете очистить выбор te по
$('#object').empty();но это не вернет вас к вашему заполнителю.
Так что его половина решение
это правильно:
$("#customers_select").val('').trigger('change');Я использую последнюю версию Select2.
для пользователей, загружающих удаленные данные,этой сбросит select2 в заполнитель без запуска ajax. Работает с V4.0.3:
$("#lstProducts").val("").trigger("change.select2");
использовать следующие действия, чтобы настроить select2
$('#selectelementid').select2({ placeholder: "Please select an agent", allowClear: true // This is for clear get the clear button if wanted });и очистить выберите ввод программно
$("#selectelementid").val("").trigger("change"); $("#selectelementid").trigger("change");
после рекомендовано способ сделать это. Найдено в документации https://select2.github.io/options.html#my-first-option-is-being-displayed-instead-of-my-placeholder (это, кажется, довольно распространенная проблема):
когда это происходит, это обычно означает, что у вас нет пустой
<option></option>как первый вариант в вашем<select>.в:
<select> <option></option> <option value="foo">your option 1</option> <option value="bar">your option 2</option> <option value="etc">...</option> </select>
у меня тоже была эта проблема, и это связано с
val(null).trigger("change");бросивNo select2/compat/inputDataошибка перед сбросом заполнителя. Я решил это, поймав ошибку и установив заполнитель напрямую (вместе с шириной). Примечание: Если у вас есть более одного вам нужно будет поймать каждый из них.try{ $("#sel_item_ID").select2().val(null).trigger("change"); }catch(err){ console.debug(err) } try{ $("#sel_location_ID").select2().val(null).trigger("change"); }catch(err){ console.debug(err) } $('.select2-search__field')[0].placeholder='All Items'; $('.select2-search__field')[1].placeholder='All Locations'; $('.select2-search__field').width(173);я запускаю Select2 4.0.3
Я пробовал выше решения, но никто не работал с версией 4x.
то, что я хочу достичь: очистить все параметры, но не трогайте заполнитель. Этот код работает для меня.
selector.find('option:not(:first)').remove().trigger('change');
Я пробовал эти решения, но это не сработало для меня.
это своего рода Хак, где вы не должны вызвать изменения.
$("select").select2('destroy').val("").select2();или
$("select").each(function () { //added a each loop here $(this).select2('destroy').val("").select2(); });
С помощью select2 версии 3.2 это сработало для меня:
$('#select2').select2("data", "");не нужно выполнять
initSelection
по состоянию на V. 4. 0.икс...
чтобы очистить значения, но и восстановить использование заполнителя...
.html('<option></option>'); // defaults to placeholderесли он пуст, он выберет первый элемент опции вместо того, что может быть не то, что вы хотите
.html(''); // defaults to whatever item is firstоткровенно...Select2-это такая боль в заднице, меня удивляет, что ее не заменили.
для держателя места
$("#stateID").select2({ placeholder: "Select a State" });для сброса выберите 2
$('#stateID').val(''); $('#stateID').trigger('change');надеюсь, что это помогает
перед тем, как очистить значение с помощью этого
$("#customers_select").select2("val", "");Попробуйте установить фокус на любой другой элемент управления при нажатии кнопки сброса.это снова покажет заполнитель.
интерфейс DOM, уже отслеживает начальное состояние...
поэтому достаточно сделать следующее:
$("#reset").on("click", function () { $('#my_select option').prop('selected', function() { return this.defaultSelected; }); });
Ну всякий раз, когда я сделал
$('myselectdropdown').select2('val', '').trigger('change');Я начал получать какой-то лаг после некоторых трех-четырех триггеров. Полагаю, произошла утечка памяти. Его нет в моем коде, потому что если я удалю эту строку, мое приложение будет отставать.
поскольку у меня есть параметры allowClear, установленные в true, я пошел с
$('.select2-selection__clear').trigger('mousedown');за этим может следовать $('myselectdropdown').select2 ('close'); триггер события на элементе select2 dom в случае, если вы хотите закрыть открытое предложение drop вниз.
один [очень] хаки способ сделать это (я видел, что это работает для версии 4.0.3):
var selection = $("#DelegateId").data("select2").selection; var evt = document.createEvent("UIEvents"); selection._handleClear(evt); selection.trigger("toggle", {});
- allowClear должно быть установлено в true
- в элементе select должен существовать пустой параметр
попробовав первые 10 решений здесь и потерпев неудачу, я нашел этой решение для работы (см." Нилов прокомментировал 7 апреля • отредактировано " комментарий вниз по странице):
(function ($) { $.fn.refreshDataSelect2 = function (data) { this.select2('data', data); // Update options var $select = $(this[0]); var options = data.map(function(item) { return '<option value="' + item.id + '">' + item.text + '</option>'; }); $select.html(options.join('')).change(); }; })(jQuery);затем производится изменение:
var data = [{ id: 1, text: 'some value' }]; $('.js-some-field').refreshDataSelect2(data);(автор изначально показал
var $select = $(this[1]);, который комментатор исправил наvar $select = $(this[0]);, который я показал выше.)
мое решение:
$el.off('select2:unselect') $el.on('select2:unselect', function (event) { var $option = $('<option value="" selected></option>'); var $selected = $(event.target); $selected.find('option:selected') .remove() .end() .append($option) .trigger('change'); });
чтобы сбросить значения и заполнитель, я просто повторно инициализирую элемент select2:
$( "#select2element" ).select2({ placeholder: '---placeholder---', allowClear: true, minimumResultsForSearch: 5, width:'100%' });
Comments