向 Select2 AJAX 控件添加搜索词选项

Posted

技术标签:

【中文标题】向 Select2 AJAX 控件添加搜索词选项【英文标题】:Add search term option to Select2 AJAX control 【发布时间】:2015-11-02 13:57:47 【问题描述】:

我有一个使用 AJAX 的 Select2 控件 - 我可以搜索远程存储库并从中选择选项。不过,我想做的是每次 AJAX 搜索返回时向控件添加一个新选项,以将该搜索词添加为新选项。

它不应该只是在搜索返回为空时添加它,而是每次搜索都添加它。

例如:我搜索 baseball,我的 AJAX 搜索返回以下结果:

baseball fields
baseball games
baseball equipment

我希望显示 Select2 下拉菜单:

baseball fields
baseball games
baseball equipment
baseball (Add As New)

希望这就像找到要挂钩的正确 Select2 选项一样简单。我可以轻松地在ajax 选项的processResults 部分附加一个选项,但不知道如何获取实际搜索的字词。

编辑:这个问题在 3.5.2 及以下版本中可以解决,但我使用的是 4.0。

【问题讨论】:

Select2 dropdown but allow new values by user? 的可能重复项 【参考方案1】:

我将用一个草率的 hack 来回答我自己的问题,现在可以解决这个问题......这似乎在 Select2 3.5.x 中使用 createSearchChoice 选项很容易解决,但在 v4 中已删除或重组。显然是 0。

ajax 选项中,我已经在使用url,所以我只是声明了一个全局变量lastSearch,我在返回该网址之前更新了该变量

ajax: 
    url: function(params) 
        lastSearch = params.term;
        return "http://myapiurl.com/path/to/endpoint?search=" + params.term;
    

然后在processResults,快速检查搜索词是否为空,然后简单地将其附加到我的API返回的数据中

processResults: function(data) 
    if (lastSearch != "") 
        data.push(
            id: "-1",
            text: lastSearch + " (Add As New)"
        );
    
    return  results: data 

同样,不是最干净的,但它现在可以完成工作。我假设由于此功能在旧版本的 Select2 中可用,它只是在 v4.0 中移动到其他地方,尚未找到。

【讨论】:

以上是关于向 Select2 AJAX 控件添加搜索词选项的主要内容,如果未能解决你的问题,请参考以下文章

select2 AJAX 控件扰乱了选项卡排序

select2 search - 只匹配以搜索词开头的词

动态添加选项到 select2

Select2 Ajax 不匹配结果

Select2 - 搜索通配符匹配

select2 使用 ajax 时删除默认选项