Синхронизация выбора в нескольких полях select
Необходимо, чтобы при выборе в первом поле какого-либо пункта, аналогичный выбор происходил бы и в другом поле.
<form action="/src/mail.php" method="POST">
<select name="sizes" id="size-select">
<option class="white-red" value="xs-s">XS-S</option>
<option class="white-red" value="m-xl">M-XL</option>
</select>
<select name="sizes" id="size-select">
<option class="white-red" value="xs-s">XS-S</option>
<option class="white-red" value="m-xl">M-XL</option>
</select>
</form>
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Если списки полностью идентичные, то задача решается просто - группировать нужные по имени класса, и проходясь по группе, присваивать текущий выбор.
В контексте вопроса, функция универсальна, то есть можно добавлять списки с соответствующей группировкой (для наглядности добавил несколько списков):
let aSelects = [...document.querySelectorAll('select')];
aSelects.forEach((el) => el.addEventListener('change', fDuplicationOfChoice));
function fDuplicationOfChoice(ev) {
let target = ev.target;
let aFilter = aSelects.filter((el) => {
return el.classList[0] == target.classList[0] && el != target;
});
if (aFilter) {
aFilter.forEach((el) => (el.selectedIndex = target.selectedIndex));
}
}
<form action="/src/mail.php" method="POST">
Type
<select name="types" id="type-select" class="type-select">
<option value="shoes">Shoes</option><option value="dress">Dress</option>
</select><br><br>
Size
<select name="sizes" id="size-select" class="size-select">
<option value="xs-s">XS-S</option><option value="m-xl">M-XL</option>
</select>
<select class="size-select">
<option value="xs-s">XS-S</option><option value="m-xl">M-XL</option>
</select><br><br>
Color
<select name="colors" id="color-select" class="color-select">
<option value="red">Red</option><option value="blue">Blue</option><option value="green">Green</option>
</select>
<select class="color-select">
<option value="red">Red</option><option value="blue">Blue</option><option value="green">Green</option>
</select>
<select class="color-select">
<option value="red">Red</option><option value="blue">Blue</option><option value="green">Green</option>
</select>
</form>
Группировка по имени класса, лишь для примера. Правильнее будет группировать по data-атрибутам, а атрибут class оставить для других целей.