mrusklon
@mrusklon
Не получается? Яростно гугли!

Как запретить выбор пункта в select, если в другом select такой же пункт уже выбран?



У каждого работника свой уникальный value, но не пойму как этим воспользоватся, если работник выбран в первом списке, как запретить выбрать его повторно во втором?
  • Вопрос задан
  • 1541 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const $select = $('select').change(function() {
  const selected = $(':selected', this).get().map(n => n.value);
  const disabled = $(':disabled', this).get().map(n => n.value);

  $select
    .not(this)
    .find('option')
    .prop('disabled', function(i, val) {
      return disabled.includes(this.value) ? val : selected.includes(this.value);
    });
});

или

const selects = [...document.querySelectorAll('select')];
selects.forEach(n => n.addEventListener('change', onChange));

function onChange() {
  const options = [...this];
  const selected = options.filter(n => n.selected).map(n => n.value);
  const disabled = options.filter(n => n.disabled).map(n => n.value);

  for (const n of selects.flatMap(m => m === this ? [] : [...m])) {
    n.disabled = disabled.includes(n.value) ? n.disabled : selected.includes(n.value);
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kolejium
Программист .NET, увлекаюсь дизайном и 3D графикой
Только JS. Создай 2 массива. В первом массиве пусть хранятся все value. Во втором только выбранные. А дальше в select заноси, те который не встречаются во втором массиве.
Ответ написан
Ваш ответ на вопрос

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

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