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

我正在使用带有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 }; } }); 

编辑:

我知道这看起来可能违反直觉,但我实际上并不想让用户使用新选项更新建议列表。 我只是使用输入作为用户选择(和取消选择)多个选项的便捷方式。 如果(静态)建议列表(ajax)中有匹配项,那么我想显示它们,同时允许用户输入自己的选项。

我想要隐藏第一个选项的动机是:当我选择其中一个建议项时,这将触发一个回调,该回调将使用一些相应的数据填充另一个控件。 选择自定义选项(无论用户键入了什么)都不应在其他控件中生成任何相应的数据。 有一天,我在输入中输入了一些东西,有5条建议。 我忘记了第一个条目只是简单地回应了我输入的内容,并将其误认为与我输入的内容完全匹配的建议。 当我选择它时,没有相应的数据显示在另一个控件中。

我很快意识到发生了什么,但如果我对此感到困惑,那么用户也很容易。 我不希望那种混乱。 删除回显文本选项将有助于此。

您看到用户输入的原因是因为您正在使用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 }; },