Files
WKVS/www/intern/js/custom-select.js
2026-04-12 21:25:44 +02:00

68 lines
2.2 KiB
JavaScript

$(document).on('click', '.selectTrigger', function (e) {
e.stopPropagation();
$(this).closest('.customSelect').toggleClass('open');
});
$(document).on('click', '.selectOptions li', function (e) {
e.stopPropagation();
const $item = $(this);
const $container = $item.closest('.customSelect');
const val = $item.data('value');
const text = $item.text();
const $input = $container.find('.selectValue');
const $label = $container.find('.selectLabel');
const $allOptions = $container.find('.selectOptions li');
$allOptions.removeClass('selected');
$item.addClass('selected');
$input.val(val);
$label.text(text);
$label.removeClass('placeholder');
$container.removeClass('open');
});
/* ── Multi-select trigger ─────────────────── */
$(document).on('click', '.selectTriggerBulk', function (e) {
e.stopPropagation();
$(this).closest('.customSelect').toggleClass('open');
});
$(document).on('click', '.selectOptionsBulk li', function (e) {
e.stopPropagation();
const $item = $(this);
const $container = $item.closest('.customSelect');
const val = $item.data('value');
const text = $item.text();
const $label = $container.find('.selectLabel');
const $input = $container.find('.selectValue');
let inputArr = $input.val() ? JSON.parse($input.val()) : [];
let containerArr = Array.isArray($container.data('value')) ? $container.data('value') : [];
if ($item.hasClass('selected')) {
$item.removeClass('selected');
inputArr = inputArr.filter(i => i !== val);
containerArr = containerArr.filter(i => i !== text);
} else {
$item.addClass('selected');
inputArr.push(val);
containerArr.push(text);
}
$container.data('value', containerArr);
$input.val(JSON.stringify(inputArr));
$input.trigger('change');
if (containerArr.length > 0) {
$label.removeClass('placeholder').text(containerArr.join(', '));
} else {
$label.addClass('placeholder').text('Bitte auswählen…');
}
});
$(document).on('click', () => $('.customSelect').removeClass('open'));