Я перехожу на select2 для использования в качестве плагина тегов из другого плагина, но есть один пробел, который я пытаюсь понять out, если select2 может поддерживать.
Давайте посмотрим на пример. Допустим, мой список вариантов (возвращающийся на серверную сторону из запроса Ajax)
"Dog", "Cat", "Monkey", "Giraffe"
В старом плагине, который я использую, после того, как я выберу один из вариантов (скажем, «Кот»), и он появится в текстовом поле, в следующий раз, когда я буду искать ту же частичную строку (скажем, «Ca»), он НЕ «У вас есть «Кошка» в раскрывающемся списке вариантов (так как она знает, что вы уже выбрали ее ранее)
Кажется, что select2 по-прежнему показывает элемент в раскрывающемся списке при поиске, независимо от того, выбрали ли вы его уже. Select2 предотвращает ввод, если после нажатия Enter, но это кажется немного неинтуитивным, поэтому я пытаюсь выяснить, есть ли способ для select2 воспроизвести такое же поведение из другого плагина (где выбор даже не отображается)
В качестве еще одного примера того, как это работает правильно, раздел вопроса с тегом stackoverflow также работает правильно. Если я добавлю «jquery» в свой список тегов для этого вопроса, а затем снова найду «jquery», он НЕ НЕТ покажет это в списке (поскольку он уже выбран). поведение, которое я ищу.
Вот мой текущий код select2:
HTML:
<select id="Tags" name="Tags" multiple="multiple">
</select>
JavaScript:
function SetupAppTags() {
$("#Tags").select2({
theme: "classic",
width: "98%",
tags: true,
ajax: {
url: "/Tag/Search",
dataType: 'json',
delay: 300,
data: function(params) {
return { q: params.term };
},
processResults: function(data, params) {
return { results: data };
},
cache: false
},
escapeMarkup: function(markup) { return markup; },
minimumInputLength: 3,
templateResult: tagFormatResult,
templateSelection: tagSelectionResult
});
}
function tagFormatResult(tag) {
if (tag.loading) {
return "Loading . . .";
} else {
if (tag.name) {
return tag.name;
}
return tag.text + " [NEW]";
}
}
function tagSelectionResult(tag) {
if (tag.name) {
return tag.name;
}
return tag.text;
}
Я думаю, что каким-то образом в функции templateResult есть способ вернуть false или что-то еще, чтобы не показывать этот элемент, если он уже выбран. Возможно ли что-то подобное (не могу найти ничего в Интернете или в документах)