我无法使用select2版本4.0来开发一个选项,该选项可以在写入所需标签名称的几个字母(2,3个字母)后通过ajax调用建议存储在数据库中的标签项目。

由于以前版本的更改,以前版本的initSelection方法不再存在。引发错误"No select2/compat/initSelection".

这是我以前版本中使用的代码:

 $('.addTags').select2({
    placeholder: "Problem Tags",
    allowClear: true,
    minimumInputLength: 2,
    tags: true,
    createSearchChoice: function (term, data) {
        if ($(data).filter(function () {
            return this.text.localeCompare(term) === 0;
        }).length === 0) {
            return {
                id: term,
                text: term
            };
        }
    },
    initSelection: function (element, callback) {
        var tags = element.val().split(",");
        var data = [];
        for (var i = 0; i < tags.length; i++) {
            data.push({ id: tags[i], text: tags[i] });
        }
        callback(data);
    },
    multiple: true,
    ajax: {
        type: 'GET',
        url: "/Problem/GetTags",
        dataType: 'json',
        data: function (term, page) {
            return {
                term: term,
                page_limit: 15
            };
        },
        results: function (data, page) {
            return { results: data.tags };
        }
    }
  });

最佳答案

使用Select2 4.0.0版本时,必须将createSearchChoice更改为createTag

createTag: function (params) {
    var term = $.trim(params.term);
    if (term === '') {
      return null;
    }
    return {
      id: term,
      text: term,
      newTag: true // add additional parameters
    }
}


那么通常不需要initSelection(请参见https://select2.org/upgrading/migrating-from-35#removed-the-requirement-of-initselection)。

在ajax选项中,将results处理程序更改为processResults

processResults: function (data, page) {
    return { results: data.tags };
},


例如,这是一个jsfiddle:https://jsfiddle.net/beaver71/bhodkpav/

关于jquery - Select2 4.0.0不支持标记,无法通过ajax调用获取标记项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48060581/

10-13 02:17