Javascript 如何使用jQuery Select2插件删除与当前键入文本匹配的下拉项?

Javascript 如何使用jQuery Select2插件删除与当前键入文本匹配的下拉项?,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我使用带有ajax调用的select2 jQuery插件来填充用户输入时的下拉选择菜单。我的输入配置为标记,因此允许多个选择,用户可以输入自己的标记,因此下拉项只是建议 问题在于,每当用户键入时,下拉列表中的第一项总是与用户键入的内容匹配。下面的项目是ajax调用检索到的建议 发生这种情况并非不合理,因为当前键入的文本实际上是一个有效的选择,但我不希望它出现在下拉列表中。我认为这会让用户误以为列表中的第一项是来自ajax调用的建议,我不希望对此产生任何混淆 是否可以从列表中删除第一项(用户当前键

我使用带有ajax调用的select2 jQuery插件来填充用户输入时的下拉选择菜单。我的输入配置为标记,因此允许多个选择,用户可以输入自己的标记,因此下拉项只是建议

问题在于,每当用户键入时,下拉列表中的第一项总是与用户键入的内容匹配。下面的项目是ajax调用检索到的建议

发生这种情况并非不合理,因为当前键入的文本实际上是一个有效的选择,但我不希望它出现在下拉列表中。我认为这会让用户误以为列表中的第一项是来自ajax调用的建议,我不希望对此产生任何混淆

是否可以从列表中删除第一项(用户当前键入的文本),如果可以,如何删除

我的构造函数选项如下所示:

myInput.select2({
    multiple: true,
    minimumInputLength: 3,
    ajax: {
        url: 'the-url',
        quietMillis: 1500,
        dataType: 'json',
        data: function(term, page) {
            return { 
                term: term.trim(),
                page: page,
                anotherParam: anotherInput.select2('val'),
            }
        },
        results: function(data, page, query) {
            // 'data' never includes the item I'm trying to remove
            // so it must be added at a later stage
            var results = [];
            for (var i=0; i<data.length; i++) {
                results.push( {id:data[i], text:data[i]} );
            }
            return {results: results};
        }
    },
    createSearchChoice: function (term) {
        term = term.trim();
        if ('' == term) {
            return null;
        }
        return { id: term.replace(',',''), text: term };
    }
});
myInput.select2({
    ...,
    createTag: function (params) {
        return null;
    },
    ...
});
myInput.select2({
多重:对,
最小输入长度:3,
阿贾克斯:{
url:“url”,
安静百万:1500,
数据类型:“json”,
数据:功能(术语,第页){
返回{
term:term.trim(),
第页:第页,
anotherParam:anotherInput.select2('val'),
}
},
结果:功能(数据、页面、查询){
//“数据”从不包括我试图删除的项
//因此,必须在稍后阶段添加
var结果=[];

对于(var i=0;i而言,您看到用户输入的原因是您使用了CreateSearchChoice选项,该选项允许用户通过输入创建自己的标记

如果要删除该选项,请删除createSearchChoice

我目前使用createSearchChoice,但我在末尾添加了文本“(新标签)”,以便用户可以看到差异,请参见下面的代码:

createSearchChoice: function (term, data) {
if ($(data).filter(function () {
            return this.text.localeCompare(term) === 0;
        }).length === 0) {
            // call $.post() to add this term to the server, receive back id
            // return {id:id, text:term}
            // or detect this shiftiness and do it below in the on-change
    return {
          id: -1+'/'+term,
          text: $.trim(term) + ' (new tag)'
    , isNew: true
        };  
},
在当前版本(选择2 4.1.0-beta.1)中,您只需要像这样使用createTag:

myInput.select2({
    multiple: true,
    minimumInputLength: 3,
    ajax: {
        url: 'the-url',
        quietMillis: 1500,
        dataType: 'json',
        data: function(term, page) {
            return { 
                term: term.trim(),
                page: page,
                anotherParam: anotherInput.select2('val'),
            }
        },
        results: function(data, page, query) {
            // 'data' never includes the item I'm trying to remove
            // so it must be added at a later stage
            var results = [];
            for (var i=0; i<data.length; i++) {
                results.push( {id:data[i], text:data[i]} );
            }
            return {results: results};
        }
    },
    createSearchChoice: function (term) {
        term = term.trim();
        if ('' == term) {
            return null;
        }
        return { id: term.replace(',',''), text: term };
    }
});
myInput.select2({
    ...,
    createTag: function (params) {
        return null;
    },
    ...
});

这听起来是一个很好的折衷方案。理想情况下,我真的很想删除第一个条目,但我怀疑我必须修改它的来源。我仍在考虑。我的问题是,如果你不允许用户创建他们自己的选择,为什么要包含它?根据你的编辑,这就是为什么我总是使用不同的样式来创建搜索选择另外,还要添加文本“(NEW)”,这样对usersYeah来说就非常清楚了,我想我必须这样做。我想插件可能允许自定义条目的方式是首先将自定义条目添加到列表中,所以如果我真的找到了一种方法将其从列表中删除,那么我可能无法添加自定义条目。