如何使用 ajax 接受 Select2 的标记化输入(即用户粘贴的选项)?
How do I accept a tokenized input into Select2 (i.e. User pasted options) using ajax?
我在 .NET MVC 网站中使用 Select2 以允许用户轻松搜索和 select 表单中的项目。这目前工作正常,但我的用户询问他们是否可以将项目列表粘贴到框中,而不是搜索并 select 一个一个地输入它们。
我找到了有关 Select2 tokenizer
参数的信息,该参数允许使用自定义标记生成器重载默认标记生成器。然而,我发现的大多数示例都针对 Select2 的旧版本,而我使用的是 4.0 版。
如何允许使用 ajax 解析粘贴的令牌列表?
下面是我是如何实现的。使用已定义的 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
},
…
});
我在 .NET MVC 网站中使用 Select2 以允许用户轻松搜索和 select 表单中的项目。这目前工作正常,但我的用户询问他们是否可以将项目列表粘贴到框中,而不是搜索并 select 一个一个地输入它们。
我找到了有关 Select2 tokenizer
参数的信息,该参数允许使用自定义标记生成器重载默认标记生成器。然而,我发现的大多数示例都针对 Select2 的旧版本,而我使用的是 4.0 版。
如何允许使用 ajax 解析粘贴的令牌列表?
下面是我是如何实现的。使用已定义的 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
},
…
});