如何禁止使用 select2 v4.0 创建新标签?

How to disable creating new tags with select2 v4.0?

我一直在试用新的 Select2 v4.0,它有很多改进。我主要对 tags 功能感兴趣。我希望能够通过 ajax 和 搜索标签,仅 能够从显示的结果中 select 标签,而不能创建新标签。该功能类似于 Whosebug - 如果您没有必要的声誉,则无法创建新标签,但您仍然可以使用现有标签标记问题。

这里是 jsfiddle 我的代码摘自示例。在示例中,您可以创建我想要限制的新标签。用户应该只能从通过 ajax 从 GitHub 检索到的列表中添加 select 标签。

有人知道如何禁用此功能吗?

您可以通过在初始化 Select2 时删除 tags: true 来禁用标签。或者,在初始化 Select2 时设置 tags: false。标签仅启用 if the tags option is truthy,当您传入 true.

这应该可行 - 在 select2 的初始化中,尝试从 createTag 函数返回未定义,如下所示:

createTag: function(params) {
                return undefined;
           }

我也一直在努力解决这个问题,但几个小时后它就开始工作了。

我指定了一些标记分隔符(因为允许我的访问者在网站的不同位置创建标签)。事实证明,即使 tags 配置设置为 false.

,分隔符仍会应用

解决方案:tags: false 并且不要为 tokenSeperators 添加值。保持 multiple: true.

我不确定是否应该在此处添加以下内容,但是当我搜索相同的问题时 google 向我指出了这个问题。但是,我使用的是旧版本 3.x,这是实现 3.x 版本相同场景的方法。

Tested on version 3.5

createSearchChoice: function(params) {
    return undefined;
}

标签:false,

$("#DropDownId").select2({
       minimumInputLength: 3,
       maximumSelectionLength: 10,
       tags: [],
       **tags:false,**
    ajax: {
        url: "@Url.Action("ActionName", "ControllerName")",
        type: "get",
        dataType: 'json',
        delay: 250,
        data: function (params) {
            return {
                Title: params.term // search term
            };
        },
        processResults: function (response) {
            return {
                results: $.map(response, function (item) {
                    return {
                        text: item.Title,
                        id: item.NibafInstituteId
                    }
                })
            };
        }
    }
});