javascript - 如何根据先前选择的下拉列表值(比另一个下拉列表更大)禁用下拉选项

标签 javascript jquery html drop-down-menu

$('select').on('change', function(){
    $('select option').prop("disabled", false);
    $("select").not(this).find("option[value="+ $(this).val() + "]").prop('disabled', true);
});

我有两个下拉菜单

<select name="start_year" id="start_year">
  <option value="2014">2014</option>
  <option value="2015">2015</option>
  <option value="2016">2016</option>
  <option value="2017">2017</option>   
</select>

<select name="last_year" id="last_year">
  <option value="2014">2014</option>
  <option value="2015">2015</option>
  <option value="2016">2016</option>
  <option value="2017">2017</option>   
</select>

如果我在第一个下拉列表中选择 2016 年,那么 2015 年和 2014 年应该在第二个下拉列表中禁用。

最佳答案

我假设您希望这两种方式都能发挥作用。在第二个下拉列表中选择年份会禁用第一个下拉列表中较低的起始年份。

如果没有,只需删除绑定(bind)到#last_year的更改事件即可。

包含一个默认选项也是谨慎的做法,可以是空的,也可以是带有一些默认文本的。

Using == and != instead of === and !== for type conversion to ensure "0" is equal to 0

$('document').ready(function() {
  $('#start_year').on('change', function() {
    var $lastYear = $('#last_year option')
    var startYearValue = this.value;

    $lastYear.prop("disabled", false);
    
    if(startYearValue === 0){
      return;
    }

    $lastYear.each(function() {
      if (this.value != 0 && this.value < startYearValue) {
        $(this).prop("disabled", true);
      }
    })
  });

  $('#last_year').on('change', function() {
    var $startYear = $('#start_year option')
    var lastYearValue = this.value;

    $startYear.prop("disabled", false);
    
    if(lastYearValue == 0){
      return;
    }

    $startYear.each(function() {
      if (this.value > lastYearValue) {
        $(this).prop("disabled", true);
      }
    })
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="start_year" id="start_year">
  <option value="0"></option>
  <option value="2014">2014</option>
  <option value="2015">2015</option>
  <option value="2016">2016</option>
  <option value="2017">2017</option>
</select>

<select name="last_year" id="last_year">
  <option value="0"></option>
  <option value="2014">2014</option>
  <option value="2015">2015</option>
  <option value="2016">2016</option>
  <option value="2017">2017</option>
</select>

关于javascript - 如何根据先前选择的下拉列表值(比另一个下拉列表更大)禁用下拉选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41824435/

相关文章:

javascript - 将两个字母的国家代码与预定义的国家代码数组匹配

jQuery 单属性、带过滤器的多值选择器

javascript - 为什么使用 `$("#submitButton").submit(function(){})` 绑定(bind)提交事件不起作用?

javascript - 如何使用 JavaScript Randomizer 脚本链接到 iframe,以便我可以从脚本中的链接列表中打开

javascript - 如何更改 javascript [客户端] 中不同阶段的端点?

javascript - 使用 ngx-translate 以 Angular 10 翻译动态字符串

javascript - angularjs 使用 ng-repeat 调用 Filter 两次

jquery - 如何在 DIV 标签上使用 jquery 验证插件

javascript - Ajax 从输入值更新分数

html - 使用 CSS 更改兄弟悬停时的元素样式