У меня есть элемент управления jQuery Select2, который использует AJAX для заполнения:
<input type="text" name="select2" id="select2" style='width:400px' value="999">
var initialSelection = { id: '999', text:"Some initial option"};
$("#select2").select2({
placeholder: "Select Option",
minimumInputLength: 2,
ajax: {
url: "/servletToGetMyData",
dataType: 'json',
data: function (term, page) { return { term: term }; },
results: function (data, page) { return { results: data.results} }
},
initSelection : function(element, callback){ callback(initialSelection); },
escapeMarkup: function (m) { return m; }
});
AJAX ссылается на базу данных возможных параметров, и, как вы можете видеть, требуется два символа ввода.
Проблема заключается в том, что пользователь может использовать диалог для добавления новой опции, если опция не существует в базе данных. По возвращении из этого диалога я пытаюсь:
var o = $("<option/>", {value: newID, text: newText});
$('#select2').append(o);
$('#select2 option[value="' + newID + '"]').prop('selected',true);
$('#select2').trigger('change');
Но это не сработает. Тот же самый точный код работает для не-AJAX Select2. Я пробовал различные альтернативы, например, используя $('#select2').select2("val", newID);
, но он не работает.
Я даже попытался полностью удалить элемент управления Select2. Однако $('#select2').remove()
удаляет только исходный <input> но оставляет элемент управления Select2 затяжным. Обратите внимание, что на странице есть несколько элементов управления Select2, поэтому я не могу использовать селектор классов для элементов управления Select2, поскольку он удалит другие элементы управления, которые мне нужны.
Любая идея: либо a) динамически добавить опцию в элемент управления Select2, который использует AJAX; или b) полностью удалить элемент управления Select2, чтобы его можно было программно добавить обратно? Или любое другое решение...
Edit Я нашел еще один вопрос, который показывает, как удалить элемент select2, используя .select2 ( "destroy" ). Это работает, но, на мой взгляд, субоптимально. Я бы предпочел бы просто добавить этот вариант, кроме как уничтожить и воссоздать select2.