如何在具有相同选项的其他选择中禁用、隐藏或删除所选选项?

How do I disable, hide, or remove selected option in other selects with the same options?

我正在编写一个包含 4 个 <select> 元素的表单。它们都有相同的选项,我想禁用、隐藏或删除一个 <select> 中一个 <select> 的 selected 选项,而另一个 <select> 元素具有相同的选项,以防止用户 select 多个 <select> 元素中的相同选项。

没有jQuery,只有普通的JavaScript。

如果可能,我希望第一个选项始终显示在所有 <select> 个元素中:

<option class="select-items" selected>Sélectionnez..</option>

这是 HTML 一个 <select>:

<select class="custom-select  mb-3" id="name_typage_0">
  <option class="select-items" selected>Sélectionnez..</option>
  <option class="select-items" value="designation">Désignation</option>
  <option class="select-items" value="email">Email</option>
  <option class="select-items" value="ville">Ville</option>
  <option class="select-items" value="secteur_activite">Secteur d'activité</option>
</select>

这是我的一部分 JavaScript:

const custSelec = document.querySelectorAll('.custom-select');
custSelec.forEach(function(item){
   item.addEventListener('change', function(){
      if(item.options[item.selectedIndex].text == 'Sélectionnez..'){
         count = -1;
      }else{
         count = 1;
      total += count;
     compteur.textContent = ` ${total}/${custSelec.length -1}`;

在您的 change 事件侦听器中,您可以从组中的所有 <select> 元素获取当前选定值集,然后遍历每个元素的选项以禁用当前选定的选项组中的其他地方以及 re-enable 之前选择但后来更改的任何选项。您可以通过在禁用/启用选项之前检查值来避免禁用每个选择中的第一个“标签”选项。

您可以使用相同的方法来隐藏或删除选项,请记住,在尝试隐藏 <option> 元素时存在一些浏览器兼容性问题,并且您需要一些额外的代码来存储完整的列表如果您要删除和恢复它们,请选择选项。

const selects = document.querySelectorAll('.select-group');
selects.forEach((elem) => {
  elem.addEventListener('change', (event) => {
    const values = Array.from(selects).map((select) => select.value);
    for (const select of selects) {
      select.querySelectorAll('option').forEach((option) => {
        const value = option.value;
        if (value &&  value !== select.value && values.includes(value)) {
          option.disabled = true;
        } else {
          option.disabled = false;
        }
      });
    }
  });
});
<select class="select-group">
  <option value="">Select...</option> 
  <option value="first">First Value</option> 
  <option value="second">Second Value</option>
  <option value="third">Third Value</option>
</select>
<select class="select-group">
  <option value="">Select...</option> 
  <option value="first">First Value</option> 
  <option value="second">Second Value</option>
  <option value="third">Third Value</option>
</select>
<select class="select-group">
  <option value="">Select...</option> 
  <option value="first">First Value</option> 
  <option value="second">Second Value</option>
  <option value="third">Third Value</option>
</select>

非常感谢您的帮助!我添加了一个小的 'if' 来修复我的错误并且它完美地工作(直到下一个错误 ^^):

if(value !== ""){
option.disabled = true;
}

或者我可以:

if (value && value !== select.value && values.includes(value) && value !== "") {
option.disabled = true;            
} 

开始时的另一个困难:学习编写简单的代码^^z