选择2,当没有选项匹配时,应显示“其他”

使用select2下拉列表,如果没有选项与用户输入的输入相匹配,如何显示默认选项?

$("something").select2({ formatNoMatches: function(term) { //return a search choice } }); 

我无法在select2文档或Stack Overflow中找到任何与所需function相匹配的内容。

编辑我越来越接近这个

 $("something").select2({ formatNoMatches: function(term) { return "
Other
" } });

但这很糟糕,而且也不可点击。

补充@ vararis的答案:

附加到元素的Select2不允许自定义createSearchChoicequery函数,因此我们需要手动添加一个选项元素(我将它添加为元素的最后一个选项,以便我们可以轻松地将它从中.pop 。结果集):

  

然后传递自定义matcherfunction,以便始终匹配此“其他”选项。

注意: Select2 3.4+使用与文档中当前显示的默认匹配器不同的默认匹配器 ,这个新匹配器调用stripDiacritics函数,以便匹配á例如。 因此,我将应用页面中包含的Select2版本附带的默认matcher ,将其默认匹配算法应用于任何不是“其他”选项的选项:

 matcher: function(term, text) { return text==='Other' || $.fn.select2.defaults.matcher.apply(this, arguments); }, 

最后,除了“其他”结果(最初总是在结果集中)之外的任何结果时,我们需要从结果集中删除“其他”选项:

 sortResults: function(results) { if (results.length > 1) results.pop(); return results; } 

演示

我通过更改匹配器解决了这个问题。

 $('#activity_log_industry_name').select2 matcher: (term, text) -> if text=="Other" return true text.toUpperCase().indexOf(term.toUpperCase())>=0 

(这是在coffeescript中。)唯一的问题是任何搜索都会弹出“其他” – 但这可以通过修改sortResults函数轻松解决。

在stackoverflow上尝试这个答案

 createSearchChoice: function (term) { return { id: term, text: term }; } 

如果未找到匹配项,请使用以下代码将消息显示为“其他”

 $("select").select2({ formatNoMatches : function(term) { return "Other"; } }); 

尝试一下,这项工作在较新的版本(Select2 4.0.3)中,无需添加新变量。

>>>>在这里摆弄<<<<

首先你需要下载javascript名称“ github / alasql ”来搜索数据中的查询

  

然后在你的JavaScript中

 // other than this array we will give "other" option var ajax_search_array = ['your', 'item', 'for', 'search']; $("#something").select2({ placeholder: "Choose your something", //data: dataItemsList, //your dataItemsList for dynamic option //... //... tags: true, createTag: function (tag) { // here we add %search% to search like in mysql var name_search = "%"+tag.term.toString().toLowerCase()+"%"; // alasql search var result = alasql('SELECT COLUMN * FROM [?] WHERE [0] LIKE ?',[ajax_search_array, name_search]); // if no result found then show "other" // and prevent other to appear when type "other" if(result==false && tag.term != "other"){ return { id: "other", text: "Other" }; } }); 

希望这项工作。