如何使用ajax接受Select2的标记化输入(即用户粘贴选项)?

时间:2015-12-14 14:20:40

标签: jquery ajax tokenize jquery-select2-4

我在.NET MVC网站中使用Select2,允许用户轻松搜索和选择表单中的项目。这当前工作正常,但我的用户询问他们是否可以将一个项目列表粘贴到框中,而不是逐个搜索和选择它们。

我找到了有关Select2 tokenizer参数的信息,该参数允许使用自定义标记符重载默认标记生成器。但是大多数示例我发现目标是旧版本的Select2,而我使用的是4.0版本。

如何使用ajax允许粘贴的令牌列表来解决它们?

1 个答案:

答案 0 :(得分:0)

以下是我实现此方法的方法。使用已定义的Ajax方法搜索用,;分隔的每个标记,并使用返回的第一个结果。

$("…").select2({
    …
    tokenizer: function (input, s2, callback) {
        var term = input.term;
        if (term.indexOf(',') < 0 && term.indexOf(';') < 0)
            return input; // Exit if no tokens

        var parts = term.split(/,|;/);
        for (var i = 0; i < parts.length; i++) {
            var part = parts[i].trim();
            if (part.length > 2) {
                $.ajax({
                    url: s2.options.ajax.url,
                    dataType: s2.options.ajax.dataType,
                    data: s2.options.ajax.data({ term: part }),
                    async: false, // If async then unable to return unmatched tokens
                    success: function (data) {
                        var pr = s2.options.ajax.processResults(data, { term: part });
                        callback(pr.results[0]);
                        parts.splice(i--, 1);
                    }
                });
            }
        }
        return { term: parts.join(';') }; // Rejoin unmatched tokens
    },
    …
});