我正在尝试使用最新版本的 Select2 来查询我网站的 API 并返回多选。它正在获取正确的数据,甚至正确格式化下拉列表,将返回对象中的两个键组合为“(A-123)John Johnson”,但下拉列表没有响应鼠标悬停或点击。
我正在使用 select2.full.min.js 和 select2.min.css 文件。出于项目的目的,我将它们包含在目录中并通过 cshtml 中的 Bundles 访问它们,而不是通过 CDN 访问它们。
HTML:
<div>
<select class="user-list" multiple="multiple" style="width: 100%">
</select>
</div>
目前,它看起来像这样,这就是我想要的:
不确定这是否相关,但是当我在搜索时浏览生成的源代码时,输入看起来不错,但下拉菜单的代码是灰色的,好像它被隐藏了一样。
根据我在这里和其他地方找到的其他建议,我尝试了一些不同的解决方案。我最终发现了 templateResult 和 templateSelection 应该如何工作(不是特别感谢文档),并尝试返回 ID,但我似乎仍然无法实际选择任何东西,甚至当我将鼠标悬停在时得到响应选项。
这就是我的结论,包括一些调试以确保返回的对象是有效的。
JS:
// Setup autocomplete/select for User filter
$(".user-list").select2({
ajax: {
url: "[api url]",
type: "GET",
dataType: "json",
data: function (params) {
return {
search: params.term, // search term
page: params.page
};
},
processResults: function (data) {
console.log(JSON.stringify(data));
return {
results: data
};
},
},
escapeMarkup: function (markup) { return markup; },
id: function (data) { return data.Id.toString(); },
minimumInputLength: 1,
templateResult: function (data, page) {
return "(" + data.User + ") " + data.Name;
},
templateSelection: function (data, page) {
return "(" + data.User + ") " + data.Name;
}
})
ID 是一个 GUID,还有另外两个字段,我将它们称为名称和用户。
数据样本:
[
{
"Id":"a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"Name":"John Johnson",
"User":"A-123"
},
{
"Id":"b2b2b2b2-b2b2-b2b2-b2b2-b2b2b2b2b2b2",
"Name":"Tom Thompson",
"User":"B-456"
}
]
我讨厌添加似乎与此有关的一堆问题,但是我发现的大多数结果都是针对具有明显不同选项的旧版本的,而且它们还没有为我工作。