Я использую Select2 (версия 3.4.0) для заполнения списка тегов. Теги сопоставляются с существующими с помощью вызова ajax, и я использую createSearchChoice
, чтобы разрешить создание новых тегов. Код работает до сих пор и выглядит примерно так:
$(mytags).select2({
multiple: true,
placeholder: "Please enter tags",
tokenSeparators: [ "," ],
ajax: {
multiple: true,
url: myurl,
dataType: "json",
data: function(term, page) {
return {
q: term
};
},
results: function(data, page) {
return data;
}
},
createSearchChoice: function(term) {
return {
id: term,
text: term + ' (new)'
};
},
});
Все довольно стандартно, за исключением добавления (new)
в createSearchChoice
. Мне нужно, чтобы пользователи знали, что это не существующий ранее тег.
Это работает так, как ожидалось: если я начну вводить «новый тег», я получу тег «новый тег (новый)», предложенный вверху списка, и если я выберу его, список тегов будет содержать «новый тег (новый)». )", как и ожидалось. Если тег уже существует, Select2 обнаруживает совпадение, и «(новый)» выбор не создается. Нажатие возврата или нажатие на совпадение работает должным образом.
Проблема возникает, когда я набираю запятую (моя единственная запись tokenSeparators
), когда есть совпадение. Select2 закрывает этот токен и добавляет тег в список, но с добавленной меткой «(новый)», т.е. он использует возвращаемое значение из createSeachChoice
, даже если это не обязательно.
Это ошибка в Select2, или я неправильно ее использую (и что мне делать вместо этого)?