Я использую элемент управления jQuery select2, и мне нужно реализовать следующую функциональность: если пользователь пытается добавить определенный элемент на основе некоторого алгоритма, я должен удалить другой (несовместимый) элемент из выбора. Я вижу два пути достижения этого:
1) запретить автоматическую сортировку выбранных значений 2) получить значение последнего выбранного элемента и при желании удалить несовместимый элемент из списка
Для 1) я не мог понять, как запретить автоматическую сортировку (и «данные», и «значения» упорядочиваются после выполнения выбора) Для 2) я нигде не мог найти информацию о последнем выбранном элементе (я ожидал найти что-то в выборе переменная e события).
Мой код следующий:
$("#PhaseFilterSelectedList").select2()
.on("select2:select", function (e) {
// removing option inconsistent with last selected item, if any
var allData = $("#PhaseFilterSelectedList").select2("val");
if (!allData || allData.length < 2)
return;
//alert("Value = " + $("#PhaseFilterSelectedList").select2("val").join(','));
//alert("Data = " + $("#PhaseFilterSelectedList").select2("data")[0].id + " " + $("#PhaseFilterSelectedList").select2("data")[1].id);
var lastItemId = allData.slice(-1)[0];
var lastItemHalf = Math.floor((parseInt(lastItemId) + 1) / 2);
var toRemove = jQuery.grep(allData, function (elem, index) {
return elem != lastItemId && Math.floor((parseInt(elem) + 1) / 2) == lastItemHalf;
});
if (!toRemove || toRemove.length < 1)
return;
allData.splice($.inArray(toRemove[0], allData), 1);
$("#PhaseFilterSelectedList").select2("val", allData);
})
Удаление несовместимых элементов работает нормально, но у меня возникают проблемы с идентификацией последнего выбора, сделанного пользователем.
Любая идея, как я могу выполнить эту задачу? Спасибо.