Select2 убрать сортировку при мульти выборе
Настроил Select2 для мульти выбора. Теперь нужно сохранять очередность выбора, но Select2 выбирает options и сортирует. Условно есть 3 опции для выбора
<select id="partners" name="partners[]" multiple>
<option value="1" >first</option>
<option value="2">second</option>
<option value="3">third</option>
</select>
И вне зависимости от очередности выбора результат сортируется по индексу
"partners" => array:3 [
0 => "1"
1 => "2"
2 => "3"
]
В документации не нашел как убрать эту сортировку. Может кто сталкивался?
UPDATE нашел такое решение
$("#partners").on("select2:select", function (evt) {
let element = evt.params.data.element;
let $element = $(element);
window.setTimeout(function () {
if ( $("#partners").find(":selected").length > 1) {
let $second = $("#partners").find(":selected").eq(-2)
$element.detach();
$second.after($element);
} else {
$element.detach();
$("#partners").prepend($element);
}
$("#partners").trigger("change");
}, 1);
});
$("#partners").on("select2:unselect", function (evt) {
if ($("#partners").find(":selected").length) {
let element = evt.params.data.element;
let $element = $(element);
$("#partners").find(":selected").after($element);
}
});
Но теперь при удалении элемента из селекта он дублируется в выборе.
Ответы (1 шт):
Автор решения: Pavlo Mezhevikin
→ Ссылка
Нашел рабочий вариант. Надеюсь кому-то поможет
$("#partners").on("select2:select", function (evt) {
let element = evt.params.data.element
let $element = $(element)
window.setTimeout(function () {
if ( $("#partners").find(":selected").length > 1) {
let $second = $("#partners").find(":selected").eq(-2)
$element.detach()
$second.after($element)
} else {
$element.detach()
$("#partners").prepend($element)
}
$("#partners").trigger("change")
}, 1)
})
$("#partners").on("select2:unselect", function (evt) {
if ($("#partners").find(":selected").length) {
let element = evt.params.data.element
let $element = $(element)
$element.detach()
$("#partners").find(":selected").eq(-1).after($element)
}
})
Возможно есть лишние действия или код не оптимизирован, но работает для множественного выбора. Не возвращает исходный порядок..