Сбросить значение 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: О
select2("val")
метод устарел и будет удален в более поздних версиях Select2. Используемый элемент.функция val() вместо этого.
лучший способ сделать это сейчас:
$('#your_select_input').val('');
Edit: Декабрь 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
В В. 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 в случае, если вы хотите закрыть открытое предложение вниз.
один [очень] хакерский способ сделать это (я видел, что он работает для версии 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%'
});