Как синхронизовать два списка на странице с помощью JavaScript'a?

Привет, на странице есть два выпадающих списка (размер и цвет). Когда пользователь выбирает из первого списка, например 42 размер, то выпадающий список надо обновить и показать только те цвета, которые есть для этого размера. Так бывает, что не все цвета могут быть для того или иного размера. Есть примеры, как это реализовать? И какую структуру для хранения этих данных выбрать? Я хочу, чтобы этот массив данных сразу формировался на сервере и передавался на клиент, чтобы потом не делать запросы на сервер каждый раз, когда будут выбираться значения из выпадающих списков. Мы не используем никакие фреймворки, только jQuery.
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
@Aves
Данные хранить можно в массиве
const data = [
  [42, 'red'],
  [44, 'red'],
  [42, 'green'],
  [44, 'green'],
  [46, 'green'],
  [42, 'blue'],
  [46, 'blue']
];

При выборе получать список подходящие значения примерно так:
data.reduce((s, [size, color]) => {
  if (size == selectedSize) s.add(color);  
  return s;
}, new Set());

Набросал пример, вместо удаления option сделал просто с использованием атрибута disabled.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Два объекта кросс-связей (для более сложных нужно строить "деревья"):
var sizes = {42: ["Красный", "Синий"], 43:["Зелёный","Синий"]}
var colors = {"Красный": [42], "Синий":[42,43], "Зелёный":[43]}
Ответ написан
Комментировать
dpigo
@dpigo
Front-end developer
Отношение размер-цвет передавайте в виде объекта:
var data = {"42": ["Красный", "Синий", "Зеленый"], "43": ["Желтый", "Белый"]};

При изменении состояния первого списка загружайте второй значениями из соответствующего массива.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы