Сбросить значение 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


Select2 использует определенный класс CSS, поэтому простой способ сбросить его:

$('.select2-container').select2('val', '');

и у вас есть преимущество, если у вас есть несколько Select2 в одной форме, все они будут сброшены с помощью этой одной команды.


используйте этот :

$('.select').val([]).trigger('change');

УДАЛИТЬ ВЫБРАННОЕ ЗНАЧЕНИЕ

$('#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');
    });

$('myselectdropdown').select2('val', '0')

где 0-ваше первое значение выпадающего списка


используйте этот код в ваш JS файл

$('#id').val('1');
$('#id').trigger('change');

чтобы сбросить значения и заполнитель, я просто повторно инициирую элемент select2:

$( "#select2element" ).select2({
    placeholder: '---placeholder---',
    allowClear: true,
    minimumResultsForSearch: 5,
    width:'100%'
});