Задать вопрос
o058oo
@o058oo
Кофе, код и рок-н-ролл!

Как скрыть option в select при выборе другого option в select?

Как реализовать на js скрытие option? Суть такая: в id="First" при выборе value="2" Продать, в id="Second" нужно скрыть value="11, 1, 16", а при выборе value="1" Сдать скрыть в id="Second" value="12, 14, 15". Предполагаю, что при выборе value, можно добавлять class="hide" нужным option, но как это реализовать на js не знаю. Подскажите, пожалуйста.
<select id="First">
	<option value="0">Сделайте выбор</option>
	<option value="2">Продать</option>
	<option value="1">Сдать</option>
	<option value="1-1"> - сдать посуточно</option>
	<option value="1-2"> - сдать помесячно</option>
</select>

<select id="Second">
	<option value="0">Тип недвижимости</option>
	<option value="12">Продать квартиру</option>
	<option value="14">Продать дом</option>
	<option value="11">Снять квартру</option>
	<option value="1">Снять дом</option>
	<option value="15">Продать землю</option>
	<option value="16">Арендовать землю</option>
</select>
  • Вопрос задан
  • 648 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
О каких select'ах идёт речь:

const first = document.querySelector('#first');
const second = document.querySelector('#second');

Кого надо скрывать - объект, ключами которого являются значения option'ов первого select'а (эти выбираем), а значениями - массивы значений option'ов второго select'а (а эти прячем):

const hideOptions = {
  1: [ '12', '14', '15' ],
  2: [  '1', '11', '16' ],
};

Слушаем на первом select'е событие change, переключаем видимость optoin'ов во втором:

first.addEventListener('change', function() {
  Array.prototype.forEach.call(second, function(n) {
    n.hidden = this.includes(n.value);
  }, hideOptions[this.value] ?? []);
});

или

.hidden {
  display: none;
}

first.onchange = e => {
  const toHide = hideOptions[e.target.value];
  for (const n of second) {
    n.classList.toggle('hidden', toHide?.indexOf(n.value) > -1);
  }
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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