首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有createSearchChoice的Select2使用新创建的键盘输入选项,即使给出匹配,错误,还是我错过了什么?

带有createSearchChoice的Select2使用新创建的键盘输入选项,即使给出匹配,错误,还是我错过了什么?
EN

Stack Overflow用户
提问于 2013-05-17 17:48:27
回答 2查看 24.8K关注 0票数 16

我正在使用Select2 (版本3.4.0)来填充标记列表。标签通过ajax调用与现有的标签进行匹配,我使用createSearchChoice来创建新的标签。到目前为止,代码运行正常,如下所示:

代码语言:javascript
复制
$(mytags).select2({
    multiple: true,
    placeholder: "Please enter tags",
    tokenSeparators: [ "," ],
    ajax: {
        multiple: true,
        url: myurl,
        dataType: "json",
        data: function(term, page) {
            return {
                q: term
            };
        },
        results: function(data, page) {
            return data;
        }
    },
    createSearchChoice: function(term) {
        return {
            id: term,
            text: term + ' (new)'
        };
    },
});

除了注意createSearchChoice中附加的(new)之外,所有这些都是非常标准的。我需要用户知道这不是一个预先存在的标签。

它按照预期工作:如果我开始输入"new- tag ",我会得到列表顶部建议的"new-tag (new)“标签,如果我选择它,标签列表就会像预期的那样包含"new-tag (new)”。如果标签已经存在,Select2会检测到匹配,并且不会创建“(新)”选项。按return键或单击匹配项即可正常工作。

当我输入一个逗号(我的单个tokenSeparators条目)而有一个匹配项时,问题就出现了。Select2关闭该标记,并将标记添加到列表中,但附加了“(新)”标签,即它使用来自createSeachChoice的返回值,即使它不需要这样做。

这是Select2中的一个bug,还是我用错了(我应该怎么做)?

EN

回答 2

Stack Overflow用户

发布于 2014-02-25 00:08:38

与其推送结果,我认为在服务器端工作会更好。

如果服务器没有找到标签,让它返回一个带有新标签的json应答

代码语言:javascript
复制
{"more":false,"results":[{"id":"whatever","text":"new-tag (new)"}]}
票数 5
EN

Stack Overflow用户

发布于 2014-10-16 22:45:35

'createSearchChoice‘还有另一个参数-- 'page',它列出了所有的选项,你可以很容易地用它找到受骗者。

代码语言:javascript
复制
createSearchChoice = function (term, page) {
    if( page.some(function(item) {
        return item.text.toLowerCase() === term.toLowerCase();
    }) ){
        return { val: term, name: term + '*' };
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16606092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档