Установка значений по умолчанию в select2 с помощью AJAX-вызова?
У меня есть два примера.
Это с обычным select2 со статическими входами, который работает с полями по умолчанию заранее:
http://jsfiddle.net/z96Ca/2/
Далее идет select2 с вызовом ajax, и значения по умолчанию не добавляются в поле-почему?!
http://jsfiddle.net/z96Ca/1/
Я некоторое время возился, но не могу понять, как добавить значения заранее, когда есть вызов ajax.
Вот строка, которая обычно добавляет код заранее:
$(test).val(["test1","test2"]).trigger("change");
Надеюсь, я достаточно ясно выразился
Большое Спасибо
2 ответов:
Поскольку вы поддерживаете Select2 с помощью входного элемента, а не элемента select, и он позволяет многократный выбор, я считаю, что вам нужно определить функцию
initSelection.Добавить следующий вариант:
initSelection: function (element, callback) { callback($.map(element.val().split(','), function (id) { return { id: id, text: id }; })); }
Примечание: вместо вызова следующего:
$(test).val(["test1","test2"]).trigger("change");Вы могли бы назвать это:
$(test).select2('val', ["test1","test2"], true);И когда вы делаете это без определения функции
initSelection, Вы получаете следующую ошибку:Ошибка: Ошибка: функция val() нельзя назвать если initSelection() не определено
Примечание: Я думаю, что причина, по которой ваш первый (не ajax) пример работает без определения функцииinitSelection, заключается в том, что он указывает опциюtags.
Обновление: Select2 v4
При использовании Select2 v4, вы всегда должны поддерживать элемент управления Select2 с элементом
<select>, а не скрытый вход.<select id="test" style="width: 300px;" multiple="multiple"> </select>Примечание: вы все еще можете указать
multiple: trueв параметрах, но вы можете также используйте атрибутmultipleэлемента<select>.Вы можете установить значения по умолчанию, включив выбранные параметры в html или программно добавив выбранные параметры в элемент
<select>, после чего вы должны вызвать событие change-event на элементе, чтобы его отображение обновилось.$test.append('<option value="initial1" selected="selected">initial1</option>'); $test.append('<option value="initial2" selected="selected">initial2</option>'); $test.trigger('change');В этом случае функция
initSelectionбольше не нужна (или не разрешена).Примечание: Select2 имеет "полную" версию, которая поддерживает некоторые обратные совместимость. Это тоже может быть вариантом.
Comments