javascript - 如何根据不同选择的变化隐藏一系列选择中的选项?

标签 javascript

相关JSFiddle

<form id="calendar_form">
    <div class="day1">
        Day 1
        <table class="selector_table">
            <select name="select1">
                <option></option>
                <option value="optionA">PersonA</option>
                <option value="optionB">PersonB</option>
            </select>
            <select name="select2">
                <option></option>
                <option value="optionA">PersonA</option>
                <option value="optionB">PersonB</option>
            </select>
        </table>
    </div>
    <br>
    <div class="day2">
        Day 2
        <table class="selector_table">
            <select name="select3">
                <option></option>
                <option value="optionA">PersonA</option>
                <option value="optionB">PersonB</option>
            </select>
            <select name="select4">
                <option></option>
                <option value="optionA">PersonA</option>
                <option value="optionB">PersonB</option>
            </select>
        </table>
    </div>
</form>
<script>
    $("select").change(function(){
        var selectThatWasChanged = $(this).attr('id');
        var valueToRemove = $(this).val();
        var dayWorkingWith = $(this).closest('.selector_table');
        $('option', dayWorkingWith).not('#' + selectThatWasChanged + ' option');
        $('option[value="' + valueToRemove + '"]').not('#' + selectThatWasChanged + ' option').hide();
    });
</script>

我已经玩了一个小时了,我很沮丧。叹。我想要完成的是:如果在第 1 天选择了 PersonA,那么在第 1 天的任何地方都不应该可以再次选择他。但是,PersonA 在第 2 天应该仍然可用。

目前,如果选择了 PersonA,则从所有其他选择中删除 PersonA。我试图通过使用 closest('.selector_table') 来磨练相关的选择。

我做错了什么?

非常感谢您!

额外的基本问题:“撤消”更改是否需要大量工作。例如,如果有人选择了 PersonA,它会按照描述隐藏 PersonA,但是如果此后在同一个选择上选择了 PersonB,它会撤消该更改并且 PersonA 再次可用?

最佳答案

change 事件应用于选择元素,获取同级 select 并禁用它的匹配 option 元素

$("select").change(function() {
  const selectedOptionVal = $(this).find(":selected")[0].value;
  const sibSelectEle = $(this).siblings('select');
  sibSelectEle.children('option').each(function(_, option) {
    if (selectedOptionVal == option.value) {
      $(option).attr("disabled", true);
    } else {
      $(option).attr("disabled", false);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="calendar_form">
  <div class="day1">
    Day 1
    <table class="selector_table">
      <select name="select1">
        <option></option>
        <option value="optionA">PersonA</option>
        <option value="optionB">PersonB</option>
      </select>
      <select name="select2">
        <option></option>
        <option value="optionA">PersonA</option>
        <option value="optionB">PersonB</option>
      </select>
    </table>
  </div>
  <br>
  <div class="day2">
    Day 2
    <table class="selector_table">
      <select name="select3">
        <option></option>
        <option value="optionA">PersonA</option>
        <option value="optionB">PersonB</option>
      </select>
      <select name="select4">
        <option></option>
        <option value="optionA">PersonA</option>
        <option value="optionB">PersonB</option>
      </select>
    </table>
  </div>
</form>

关于javascript - 如何根据不同选择的变化隐藏一系列选择中的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56879451/

相关文章:

javascript - 为什么 ajax 响应代码没有正确附加?

javascript - Chrome - "Trying to load script from unauthenticated sources"

javascript - django 使用模板 View 和 ajax

用于列表菜单的 JavaScript 和 CSS

javascript - 显示有关导出完整 RadGrid Telerik Web 组件的数据的 javascript 警报

javascript - useLocation 无法识别状态

javascript - 我的 AJAX 调用需要多长时间?

javascript - NodeJS nexe fusebox 失败

javascript - 为什么启用 html5mode 后 AngularJS 路由会被破坏?

javascript - 单击 anchor 标记后,显示 AngularJS ng-repeat 给出的值