選擇突出顯示的選項我通過AJAX獲取用戶ID和名稱,並使用Select2搜索它們,但我的用戶已請求通過按Tab鍵從下拉菜單中進行選擇的功能按Enter鍵處理它。這是我的選擇2聲明:Select2 4.0.0 AJAX - 通過標籤
$("#user-select").select2({
ajax: {
url: "/api/User",
method: "get",
data: function (params) {
return {
search: params.term
};
},
beforeSend: function() {
$(".loading-results").text("Loading...");
},
processResults: function (data) {
return {
results: data
};
},
cache: true
},
allowClear: true,
placeholder: "Enter a User ID or Name",
templateResult: function (data) {
return "(" + data.id + ") " + data.name;
},
templateSelection: function (data) {
return "(" + data.id + ") " + data.name;
}
「.select2-search__field」似乎是每當下拉的可見的,突出顯示的元素獲取類聚焦元素‘選擇2 - results__option - 突出’。
我試過一些解決方案,但似乎沒有任何工作,特別是因爲這個元素出現並隨時打開下拉菜單消失。不幸的是,我從我的嘗試中丟失了代碼,但是他們主要是通過在焦點輸入上點擊Tab時執行preventDefault,然後在突出顯示的元素上觸發單擊事件或觸發輸入上的Enter鍵。
我也嘗試調整selectOnClose選項,但似乎越野車在一般情況下,導致無盡的循環,當我有它正常運行,更少嘗試覆蓋它基於什麼鍵被按下。
[編輯]
所選解決方案的工作,但不考慮指定的templateResult,而不是顯示 「()未定義」。所以,我調整它作爲覆蓋選擇的選定選項添加突出顯示的答案,然後在該選擇上直接調用更改事件。
...(同初始選擇2)
}).on('select2:close', function (evt) {
var context = $(evt.target);
$(document).on('keydown.select2', function (e) {
if (e.which === 9) { // tab
var highlighted = context.data('select2').$dropdown.find('.select2-results__option--highlighted');
if (highlighted) {
var data = highlighted.data('data');
var id = data.id;
var display = data.name;
$("#user-select").html("<option value='" + id + "' selected='selected'>" + display + "</option>");
$("#user-select").change();
}
else {
context.val("").change();
}
}
});
你有想過嗎?遇到相同的問題。 – grant
沒有骰子,在我發佈之前,我已經用盡了大部分的故障排除功能。如果你知道我應該在此標記以幫助人們找到可以回答的人,請告訴我,我會將其編輯到帖子中。 – MikeOShay
非常感謝 - 我花了一些時間敲打它,也沒有運氣。我會讓你知道如果我想出任何東西:) – grant