我正在从另一个插件迁移到select2 to use as a tagging plugin但是我有一个差距,我试图找出select2是否可以支持 .
让我们看一个例子 . 让我们说我的选择列表(从Ajax请求返回服务器端)是
"Dog", "Cat", "Monkey", "Giraffe"
在我使用的旧插件中,在我选择其中一个选项(让我们说“Cat”)并且它显示在文本框中,下次我搜索相同的部分字符串(比如说“Ca”)时,它就是DOESN “T”让“猫”出现在选择的下拉中(因为它知道你之前已经选择了它)
无论您是否已选择它,似乎select2仍会在搜索时显示下拉列表中的项目 . Select2确实阻止输入,如果你输入后输入,但这似乎有点不直观,所以我试图弄清楚是否有一种方法让select2从另一个插件复制相同的行为(选择甚至没有显示)
作为另一个正常工作的例子,问题的stackoverflow标记部分也做了正确的事情 . 如果我将"jquery"添加到此问题的标签列表中,然后再次搜索"jquery",则 DOESN"T 会在列表中显示(因为它已被选中) . 这是我正在寻找的行为 .
这是我当前的select2代码:
HTML :
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或者某些内容,如果已经选择了该项,则不显示该项 . 这样的事情是可能的(在网上或文档中找不到任何东西)