Установка значений по умолчанию в select2 с помощью AJAX-вызова?



У меня есть два примера.



Это с обычным select2 со статическими входами, который работает с полями по умолчанию заранее:
http://jsfiddle.net/z96Ca/2/



Далее идет select2 с вызовом ajax, и значения по умолчанию не добавляются в поле-почему?!
http://jsfiddle.net/z96Ca/1/



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



Вот строка, которая обычно добавляет код заранее:



$(test).val(["test1","test2"]).trigger("change");


Надеюсь, я достаточно ясно выразился



Большое Спасибо

809   2  

2 ответов:

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

Добавить следующий вариант:

initSelection: function (element, callback) {
    callback($.map(element.val().split(','), function (id) {
        return { id: id, text: id };
    }));
}

Jsfiddle


Примечание: вместо вызова следующего:

$(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 больше не нужна (или не разрешена).

Jsfiddle

Примечание: Select2 имеет "полную" версию, которая поддерживает некоторые обратные совместимость. Это тоже может быть вариантом.

В более новых версиях select2 отсутствует initSelection.

Comments

    Ничего не найдено.