【问题标题】:Second drop-down options based on first drop-down基于第一个下拉菜单的第二个下拉选项
【发布时间】:2017-06-23 02:39:19
【问题描述】:

在网页上,如果您在第一个下拉菜单中选择不同的选项,则第二个下拉菜单中会出现不同的选项。

<select id="independent">
  <option value="A"> A </option>
  <option value="B"> B </option>
</select>

<select id="dependent">
  <option value="A021">    A1 </option>
  <option value="A22019">  A2 </option>
  <option value="A3541">   A3 </option>
  <option value="B148">    B1 </option>
  <option value="B2">      B2 </option>
  <option value="B397415"> B3 </option>
</select>

这是我目前拥有的 jQuery:

$(function() {

    $('#independent').on('change', function (e) {
        var endingChar = $(this).val().split('').pop();
        var selected = $( '#independent' ).val();
          $('#dependent option[value^='+selected+']').toggle(endingChar == selected);
        $('#dependent').val('');
    })

});

我在这里要做的是
1.将变量selected设置为第一个下拉列表中选择的选项的值
2. 使用该值查看所有第二个下拉选项的值的第一个字母,以填充我想在第二个下拉列表中看到的内容

但是,当我从第一个下拉列表中选择任何内容时,所有选项(A1 到 B3)都会出现在第二个下拉列表中。怎么了?

【问题讨论】:

    标签: javascript jquery html drop-down-menu


    【解决方案1】:

    你可以这样试试。

    首先使用toggleClass()隐藏所有选项并只显示匹配的选项

    $(function() {
    
        $('#independent').on('change', function (e) {
        $('#dependent').val('');
            var endingChar = $(this).val().split('').pop();       
            var selected = $( '#independent' ).val();
              $('#dependent option').addClass('show');
     
              $('#dependent option[value^='+selected+']').toggleClass('show');
        })
    
    });
    .show{
    display:none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select id="independent">
      <option value="A"> A </option>
      <option value="B"> B </option>
    </select>
    
    <select id="dependent">
      <option value="A021">    A1 </option>
      <option value="A22019">  A2 </option>
      <option value="A3541">   A3 </option>
      <option value="B148">    B1 </option>
      <option value="B2">      B2 </option>
      <option value="B397415"> B3 </option>
    </select>

    【讨论】:

    • 假设我有 3 个下拉菜单,最后一个下拉菜单依赖于前两个。如果我在第一个下拉列表中选择 A 并在第二个下拉列表中选择 B,我怎样才能使第三个下拉列表具有 A 的值,并附加 B 的值?
    • 这个答案对你有帮助吗?
    • 对那个也做同样的事情
    • 我不确定如何将值附加到下拉列表
    • 谷歌一下如何将值附加到下拉列表
    【解决方案2】:

    以下循环遍历选项。如果选项的值不是以正确的第一个字母开头,则会添加一个类以通过 css 隐藏。如果匹配,则删除该类。它还会选择与正确字母匹配的第一个选项,因此不会选择隐藏选项。

    $(function() {
        $('#independent').on('change', function (e) {
    
          var selected = $('#independent').val().toUpperCase();
          var currentDep = $('#dependent').val().charAt(0).toUpperCase();
          var changedSelected = false;
    
          $('#dependent option').each(function() {
    
            var opt = $(this);
            var value = opt.val().charAt(0).toUpperCase();
    
            if (value !== selected) {
    
              opt.addClass('hide');
              opt.removeAttr('selected');
    
            } else {
    
              opt.removeClass('hide');
    
              if (!changedSelected) {
    
                opt.attr('selected', 'selected');
                changedSelected = true;
    
              } else {
                opt.removeAttr('selected');
              }
            }
          });
        });
    });
    .hide {
      display: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select id="independent">
      <option value="A"> A </option>
      <option value="B"> B </option>
    </select>
    
    <select id="dependent">
      <option value="A021">    A1 </option>
      <option value="A22019">  A2 </option>
      <option value="A3541">   A3 </option>
      <option value="B148">    B1 </option>
      <option value="B2">      B2 </option>
      <option value="B397415"> B3 </option>
    </select>

    【讨论】:

      【解决方案3】:

      $(function() {
          $('#independent').on('change', function (e) {
      
            var selected = $('#independent').val().toUpperCase();
            var currentDep = $('#dependent').val().charAt(0).toUpperCase();
            var changedSelected = false;
      
            $('#dependent option').each(function() {
      
              var opt = $(this);
              var value = opt.val().charAt(0).toUpperCase();
      
              if (value !== selected) {
      
                opt.addClass('hide');
                opt.removeAttr('selected');
      
              } else {
      
                opt.removeClass('hide');
      
                if (!changedSelected) {
      
                  opt.attr('selected', 'selected');
                  changedSelected = true;
      
                } else {
                  opt.removeAttr('selected');
                }
              }
            });
          });
      });
      .hide {
        display: none;
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <select id="independent">
        <option value="A"> A </option>
        <option value="B"> B </option>
      </select>
      
      <select id="dependent">
        <option value="A021">    A1 </option>
        <option value="A22019">  A2 </option>
        <option value="A3541">   A3 </option>
        <option value="B148">    B1 </option>
        <option value="B2">      B2 </option>
        <option value="B397415"> B3 </option>
      </select>

      【讨论】:

      • 它在这里工作正常,但是当我在我的系统中复制过去这段代码时,它的工作方式不一样
      • 即使是其他任何下拉菜单都不起作用的选项。我的意思是,如果我评论 jquery 代码,那么即使它的输出相同,我也只能看到带有列表的下拉列表。和 jquery 一样。似乎 jquery 代码对下拉菜单没有影响。有什么解决办法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多