Очистить раскрывающийся список с помощью jQuery Select2

Я пытаюсь программно очистить выпадающее меню, используя фантастический Select2 библиотека. Выпадающее меню динамически заполняется удаленным вызовом ajax с помощью Select2 .

HTML-код:

<input id="remote" type="hidden" data-placeholder="Choose Something" />

Javascript:

        var $remote = $('#remote');

        $remote.select2({
            allowClear: true,
            minimumInputLength: 2,
            query: function(options){
                $.ajax({
                    dataType: 'json',
                    url: myURL + options.term,
                    error: function(jqXHR, textStatus, errorThrown){
                        smoke.alert(textStatus + ": server returned error on parsing arguments starting with " + options.term);
                    },
                    success: function(data, textStatus, jqXHR){
                        var results = [];
                        for(var i = 0; i < data.length; ++i){
                            results.push({id: data[i].id, text: data[i].name});
                        }

                        options.callback({results: results, more: false});
                    }
                });
            }
        });

к сожалению, вызов $remove.select2('val', '') выбрасывает следующее исключение:

 Uncaught Error: cannot call val() if initSelection() is not defined

Я попытался установить attr установка val, text и Select2 конкретные data функция. Кажется, не может сделать парня ясным и работать в режиме радиокнопки. У кого-нибудь есть предложения?

14 ответов


это работает для меня:

 $remote.select2('data', {id: null, text: null})

Он также работает с jQuery validate, когда вы очищаете его таким образом.

-- edit 2013-04-09

на момент написания этого ответа, это был единственный способ. С недавними патчами теперь доступен правильный и лучший способ.

$remote.select2('data', null)

в случае Select2 версии 4+

Он изменил синтаксис, и вам нужно написать так:

// clear all option
$('#select_with_blank_data').html('').select2({data: [{id: '', text: ''}]});

// clear and add new option
$("#select_with_data").html('').select2({data: [
 {id: '', text: ''},
 {id: '1', text: 'Facebook'},
 {id: '2', text: 'Youtube'},
 {id: '3', text: 'Instagram'},
 {id: '4', text: 'Pinterest'}]});

Это правильный, select2 очистит выбранное значение и покажет заполнитель обратно .

$remote.select2('data', null)

используя select2 версии 4 Вы можете использовать эту короткую нотацию:

$('#remote').html('').select2({data: {id:null, text: null}});

Это передает массив json с нулевым идентификатором и текстом в select2 при создании, но сначала с .html('') удаляет ранее сохраненные результаты.


для select2 версии 4 легко использовать это:

$('#remote').empty();

после заполнения элемента select вызовом ajax вам может понадобиться эта строка кода в разделе success для обновления содержимого:

  success: function(data, textStatus, jqXHR){
  $('#remote').change();
                } 

вы должны использовать этот :

   $('#remote').val(null).trigger("change");

предлагаемый метод @Lelio Faieta работает для меня, но потому что я использую тема на Bootstrap, Он удаляет все настройки начальной загрузки для select2. Поэтому я использовал следующий код:

$("#remote option").remove();

Я немного опоздал, но это то, что работает в последней версии (4.0.3):

$('#select_id').val('').trigger('change');

эти оба работают для меня, чтобы очистить меню:

.select2('data', null)
.select2('val', null)

но важное примечание: значение не сбрасывается .функция val() вернет первый вариант, даже если он не выбран. Я использую Select2 3.5.3


Я нашел ответ (уважение user780178) Я искал в этом другой вопрос:

сбросить select2 значение и показать placeholdler

$("#customers_select").select2("val", "");

С >4.0 для того, чтобы действительно очистить select2 вам нужно сделать следующее:

$remote.select2.val('');
$remote.select2.html('');
selectedValues = []; // if you have some variable where you store the values
$remote.select2.trigger("change");

обратите внимание, что мы выбираем select2 на основе первоначального вопроса. В вашем случае, скорее всего, вы выберете select2 по-другому.

надеюсь, что это помогает.


поскольку ни один из них не работал для меня (select2 4.0.3), пошел путь выбора std.

for(var i = selectbox.options.length - 1 ; i >= 0 ; i--)
    selectbox.remove(i);

вы можете использовать это или ссылаться далее на этоhttps://select2.org/programmatic-control/add-select-clear-items

$('#mySelect2').val(null).trigger('change');

вот как я делаю:

$('#my_input').select2('destroy').val('').select2();