代码之家  ›  专栏  ›  技术社区  ›  LOTUSMS

访问条件视图下拉列表的选定状态

  •  1
  • LOTUSMS  · 技术社区  · 6 年前

    我试图在下拉列表中有条件地显示所选值上的内容。下面是一个明显不起作用的例子:

    <select id="sel">
        <option value="1" selected>aa</option>
        <option value="2">bb</option>
        <option value="3">cc</option>
    </select>
    
    <div id="aa1">aa</div>
    <div id="bb1">bb</div>
    <div id="cc1">cc</div>
    

    jQuery查询:

    $("#aa1, #bb1, #cc1").hide();
    
    $('#sel').change(function(){
       var r = $(this).val().is(":selected");
    
       switch(r) {
         case '1':
           $("#aa1").show();
           break;
         case '2':
           $("#bb1").show();
           break;
         case '3':
           $("#cc1").show();
           break;
         default:
           $("#aa1, #bb1, #cc1").hide();
           break;
       }   
    });
    

    这是一个 fiddle

    $("#sel").on("change", function(){
        var r = $(this).val();
        if(r == "1"){
            $("#aa1").show();
        }else{
            $("#aa1").hide();
        }
    });
    

    问题是,它只对更改事件起作用(正如您在代码中看到的),当它加载到DOM上时,我需要它读取加载的selected状态。因此,如果HTML选择了选项1,id=aa1应该会自动显示,如果我将它更改为另一个选项,它应该隐藏,即使新选择的选项将是“selected”。所以我不能在一个选中的项目上显示任何div,因为它会一直显示,因为一个总是被选中的。它需要以某种方式(即,当选择值(1)选项时,执行此操作,如果选择值(2),则执行其他操作,等等。

    我宁愿使用case语句,因为我有几个选项和几个视图。

    提前谢谢伙计们

    1 回复  |  直到 6 年前
        1
  •  1
  •   Taplar    6 年前

    trigger()

    您还可以使用映射来减少if-else或将逻辑切换为简单语句。

    var $selectionDisplays = $('.selectionDisplay');
    
    $('#sel').on('change', function(e) {
      var valueMap = {
        '1': 'aa1'
        , '2': 'bb1'
        , '3': 'cc1'
      };
      var idToShow = valueMap[e.target.value];
    
      $selectionDisplays.hide();
      
      if (idToShow) $selectionDisplays.filter('#'+ idToShow).show();
    }).trigger('change');
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <select id="sel">
      <option value="1" selected>aa</option>
      <option value="2">bb</option>
      <option value="3">cc</option>
    </select>
    
    <div id="aa1" class="selectionDisplay">aa</div>
    <div id="bb1" class="selectionDisplay">bb</div>
    <div id="cc1" class="selectionDisplay">cc</div>
        2
  •  1
  •   Zakaria Acharki    6 年前

    Updated fiddle .

    $("#sel").on("change", function() {
      ...
    }).trigger('change');
    //Or
    }).change();