【问题标题】:Two dropdown select objects, disable some options of no 2 dependent on choice in no 1 in jQuery两个下拉选择对象,禁用第 2 项的某些选项,这取决于 jQuery 中第 1 项中的选择
【发布时间】:2020-03-02 15:42:34
【问题描述】:

我在 jQuery 中有以下函数:

$(function() {
  $('.jqueryOptions').hide();
  $('.AllYearsAllMonths').show();
  $('#year').change(function() {
    if ( $(this).val() == 'AllYears') {
      $('#03','#04','#05').prop("disabled", true);
    } if ( $(this).val() == '2019') {
      $('#01','#02','#03','#04','#05').prop("disabled", true);
    } if ( $(this).val() == '2020') {
      $('#03','#04','#05','#06','#07','#08','#09','#10','#11','#12').prop("disabled", true);
    }
    $('.jqueryOptions').slideUp();
    $("." + $(this).val() + $('#month').val()).slideDown();
  });
  $('#month').change(function() {
    $('.jqueryOptions').slideUp();
    $("." + $('#year').val() + $(this).val()).slideDown();
  });
});

选择以下 HTML 中的哪些函数:

<select id="year">
<option value="AllYears" selected>All Time</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select>
<select id="month">
<option value="AllMonths" selected>All Months</option>
<option value="Jan" id="#01">januari</option>
<option value="Feb" id="#02">februari</option>
<option value="Mar" id="#03">maart</option>
<option value="Apr" id="#04">april</option>
<option value="May" id="#05">mei</option>
<option value="Jun" id="#06">juni</option>
<option value="Jul" id="#07">juli</option>
<option value="Aug" id="#08">augustus</option>
<option value="Sep" id="#09">september</option>
<option value="Oct" id="#10">oktober</option>
<option value="Nov" id="#11">november</option>
<option value="Dec" id="#12">december</option>
</select>

这个想法是,通过选择年份,需要禁用/启用不同月份的子集。 尽管有许多相似但略有不同的例子,但我似乎并没有得到这个工作。

有什么建议吗?我哪里错了?

(注意:上滑/下滑用于其他功能。我确实包含了它,你永远不知道 :))

【问题讨论】:

    标签: jquery select prop


    【解决方案1】:

    您已将 ID 属性设置为 #01,因此选择器需要为 ##01。这不会很好地工作,因此您需要从 ID 属性中删除 #。请查看代码段:

    $(function() {
      //$('.jqueryOptions').hide();
      //$('.AllYearsAllMonths').show();
      $('#year').change(function() {
        var v = $(this).val();
        console.log(v);
        switch (v) {
          case "AllYears":
            console.log("Case 1");
            $("#03, #04, #05").prop("disabled", true);
            break;
          case "2019":
            console.log("Case 2");
            $("#01, #02, #03, #04, #05").prop("disabled", true);
            break;
          case "2020":
            console.log("Case 3");
            $("#03, #04, #05, #06, #07, #08, #09, #10, #11").prop("disabled", true);
            break;
        }
        //$('.jqueryOptions').slideUp();
        //$("." + $(this).val() + $('#month').val()).slideDown();
      });
      $('#month').change(function() {
        //$('.jqueryOptions').slideUp();
        //$("." + $('#year').val() + $(this).val()).slideDown();
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <select id="year">
      <option></option>
      <option value="AllYears">All Time</option>
      <option value="2019">2019</option>
      <option value="2020">2020</option>
    </select>
    <select id="month">
      <option></option>
      <option value="AllMonths">All Months</option>
      <option value="Jan" id="01">januari</option>
      <option value="Feb" id="02">februari</option>
      <option value="Mar" id="03">maart</option>
      <option value="Apr" id="04">april</option>
      <option value="May" id="05">mei</option>
      <option value="Jun" id="06">juni</option>
      <option value="Jul" id="07">juli</option>
      <option value="Aug" id="08">augustus</option>
      <option value="Sep" id="09">september</option>
      <option value="Oct" id="10">oktober</option>
      <option value="Nov" id="11">november</option>
      <option value="Dec" id="12">december</option>
    </select>

    我还使用了switch() 语句与一些if() 语句。在 HTML 中,我添加了一个空白选项。这允许用户实际更改测试的选项之一。

    【讨论】:

    • 谢谢!是的,我得到它的工作。但我仍在尝试,因为当我使用 if 语句(我的偏好)时它不起作用。在调试器中,我可以看到它输入了正确的选择。是的,开关工作。所以我的问题是为什么?到底是怎么回事?我想了解。
    • 对我自己的回答:是的,它也适用于 if 语句,但你不需要打错字。问题最终是选择器中的引用和#。感谢您指出这一点!
    【解决方案2】:

    希望对您有所帮助。

    $(document).ready(function() {
      $('#year').val('AllYears').change();
    });
    $('#year').on('change', function() {
      select_option_disable($('#year').val());
    });
    
    function select_option_disable(disable_option) {
      var disabled_list = $("#year option[value='" + disable_option + "']").attr('data-disable');
      console.log(disabled_list);
      disabled_list = disabled_list.split(',');
      $("#month option").attr('disabled', false);
      disabled_list.forEach(function(item) {
        $("#month option[value='" + item + "']").attr('disabled', true);
      });
    
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    
    <select id="year">
      <option value="AllYears" data-disable="Mar,Apr,May" selected>All Years</option>
      <option value="2019" data-disable="Jan,Feb,Mar">2019</option>
      <option value="2020" data-disable="Apr,May,Jun">2020</option>
    </select>
    <select id="month">
      <option value="AllMonths" selected>All Months</option>
      <option value="Jan" id="#01">januari</option>
      <option value="Feb" id="#02">februari</option>
      <option value="Mar" id="#03">maart</option>
      <option value="Apr" id="#04">april</option>
      <option value="May" id="#05">mei</option>
      <option value="Jun" id="#06">juni</option>
      <option value="Jul" id="#07">juli</option>
      <option value="Aug" id="#08">augustus</option>
      <option value="Sep" id="#09">september</option>
      <option value="Oct" id="#10">oktober</option>
      <option value="Nov" id="#11">november</option>
      <option value="Dec" id="#12">december</option>
    </select>

    【讨论】:

    • 如果用户选择第一个选项,它不会解决。 change 不会被触发,并且不会禁用该选项的那几个月。这也没有解决或消除 ID 属性问题。
    • 刚刚添加的示例可以使其动态化。 data-disable="Mar,Apr,May"
    • “这也没有解决或删除 ID 属性问题”?
    • 如果您选择“所有年份”,则不会禁用月份。
    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多