select2: выбор по умолчанию при множественном выборе с помощью AJAX

Я использую замечательный select2 для создания комбинации множественного выбора.

Я хотел бы программно выбрать значения по умолчанию (как при выборе, сделанном пользователем ранее), но я не знаю, как это сделать. Я читал, что использование initSelection помогает, но это вызывается при создании комбо, и я не хочу, чтобы этот выбор по умолчанию всегда выполнялся.


person Gabriel Sanmartin    schedule 22.04.2013    source источник
comment
ты нашел ответ?   -  person Tasawar Hussain    schedule 26.05.2017


Ответы (10)


правильное решение в версии 4.x на примере:

$('#element').val(['val1','val2']).trigger('change');

см.: описание создателя

person Ramin Firooz    schedule 18.12.2016

Я нашел несколько решений, возможно, это поможет вам:

$('#el').select2({...}) // init select2

var defaultData = [{id:1, text:'Item1'},{id:2,text:'Item2'},{id:3,text:'Item3'}];

$('#el').data().select2.updateSelection(defaultData);
person sanj    schedule 22.05.2013
comment
этот приведенный выше код работал нормально для меня, но столкнулся с некоторыми проблемами при устранении неполадок. на всю жизнь я не смог найти документацию по .updateSelection(). также я получил бы странный разрыв строки при вводе при предварительной загрузке данных. нашел новый код, который работал лучше для меня. $('#input').select2('data', preload_data); где preload_data — это объект - person Andrew Brown; 22.01.2014

Со страницы документации:

«val — получает или устанавливает выбор. Если параметр значения не указан, возвращается атрибут id текущего выбранного элемента. Если параметр значения указан, он станет текущим выбором».

Также из документов:

$("#e8").select2("val", "CA");
person Community    schedule 22.04.2013
comment
Это не сработает. Поскольку данные загружаются динамически через AJAX, при установке свойства val в элемент управления просто не загружаются элементы. - person Gabriel Sanmartin; 22.04.2013
comment
После того, как ваш вызов ajax завершен и вы установили данные в поле выбора, ТОГДА из обработчика успеха вызова ajax вы можете вызвать код, упомянутый в ответе выше? Это если вы используете свой собственный вызов Ajax. Но если вы используете Ajax-вызов, предоставляемый компонентом, я не знаю — он не предлагает событие обработчика завершения — так что вы можете написать свой собственный (может быть, 10 строк?). - person ; 22.04.2013
comment
Это не сработает, потому что мой вызов AJAX основан на поисковом запросе, который пользователь ввел во входных данных (поэтому он не будет загружать весь набор элементов). Кроме того, я не хочу, чтобы мой выбор отображался постоянно; Я хотел бы иметь возможность включать и выключать его. - person Gabriel Sanmartin; 22.04.2013
comment
Итак, когда именно вы хотите выбрать значение в поле выбора? - person ; 22.04.2013
comment
У меня есть две кнопки, которые показывают мою форму, одна должна показывать форму с выбранными элементами, другая должна показывать ее чистой. - person Gabriel Sanmartin; 22.04.2013

Как указано в документации здесь, вы можете просто добавить «параметры» к выбранному разметка, чтобы предварительно выбрать начальные значения по умолчанию.

<select class="js-data-example-ajax">
  <option value="3620194" selected="selected">select2/select2</option>
</select>
person Thomas Clowes    schedule 25.01.2016
comment
К сожалению, это не работает! Элементы отображаются в поле без текста! - person Triynko; 08.03.2016
comment
Работал как шарм для меня (без использования источника ajax) - person Roland; 09.06.2016
comment
У меня такое же поведение, как у @Triyko. Я добавил один параметр в разметку выбора и впоследствии инициализировал select2 с источником ajax, в результате чего поле выбора остается пустым. Любые идеи? - person Holger Stitz; 20.09.2016
comment
+1 @Triynko думаю, то же самое происходит и со мной. Вы нашли исправление?? Теперь я пытаюсь перенести исходные данные в виде json, а не передавать их в DOM как «вариант» - person absin; 30.03.2017
comment
Наконец-то разобрался, нет необходимости поставлять json!! Внутренний HTML-код ‹option› помещается в объект репо под текстовым ключом. Таким образом, repo.text выдаст файл innerhtml. То есть все, что нам нужно сделать, это указать repo.text в параметре formatSelection. Также json, передаваемый из сервлета (контроллера), должен иметь желаемый текст метки, помещенный под текстовым ключом!! Все еще выясняю, как добавить атрибуты к созданным элементам li, чтобы я мог сохранить измененный список. Любые идеи? - person absin; 30.03.2017

$('#el').select2().val(['val1','val2']).trigger("change")

делает трюк, но по некоторым причинам он удаляет возможность добавить свой собственный тег...

person sebap    schedule 09.08.2016

Следующий код работает нормально, но select2 нужно обновить

$('#el').data().select2.updateSelection(defaultData);
person Fayez Barbari    schedule 13.01.2014

Чтобы продолжить ответ @sanj. Кажется, это работает для меня в моих проектах.

Через HTML

HTML

<select class="select2" style='width:100%;' multiple>
    <option val=''>Please choose</option>
    <option val="1" selected>One</option>
    <option val="2" selected>Two</option>
    <option val="3">Three</option>
</select>

JS

$('.select2').select2();

Результаты введите здесь описание изображения

С помощью Javascript

HTML

<select class="select2" style='width:100%;' multiple>
    <option val=''>Please choose</option>
    <option val="1">One</option>
    <option val="2">Two</option>
    <option val="3">Three</option>
</select>

JS

$('.select2').select2();
var defaultData = [{id:1, text:'One'},{id:2,text:'Two'}];
$('.select2').data().select2.updateSelection(defaultData);

Результаты введите здесь описание изображения

person Louwki    schedule 08.11.2016

Разобрались наконец!! Select2 перебирает тег <option> под тегом <select>.

<select class="js-data-example-ajax" style="width:100%">
  <option value="3620194" selected="selected">Put the pre-selected options here</option>
</select>

Внутренний HTML-код <option> помещается в объект репо под текстовым ключом. Итак, repo.text даст файл innerhtml. То есть все, что нам нужно сделать, это поставить repo.text в параметр formatSelection в файле init. Также json, передаваемый из сервлета (контроллера), должен иметь желаемый текст метки, помещенный под ключ text!! Все еще выясняю, как добавить атрибуты к созданным элементам li, чтобы я мог сохранить измененный список. Любые идеи?

person absin    schedule 30.03.2017

Я просмотрел массив значений, затем установил каждый параметр, соответствующий («выбрано», true)

values = [2, 5, 3]

for val in values
  $("#selects_id option[value="+val+"]").prop("selected",true).trigger("change")

Вы также можете работать с результатами, полученными от вызова Ajax.

person Abdullah Aden    schedule 12.12.2017

Вы можете найти решение здесь с автозаполнением, множественный выбор Раскрывающийся список с помощью JQuery Select2.

Связывает данные с HTML-элементом «select», который затем используется функциями «Select2», чтобы преобразовать их в красивый раскрывающийся список с множественным выбором.

Он может хорошо работать с использованием AJax и обязательно попробует в ближайшие дни.

person Arun Banik    schedule 14.07.2013