【问题标题】:Show div based on selected dropdown value根据选定的下拉值显示 div
【发布时间】:2020-01-29 20:19:24
【问题描述】:

我有一个下拉菜单:

<select>
<option value="" selected="selected">Default</option>
<option value="a">first</option>
<option value="b">second</option>
<option value="c">third</option>
<option value="d">fourth</option>
</select>

因此,我有 1 个父 div 元素和 4 个子 div 元素

<div id="default">
  <div id="a">Random1</div>
  <div id="b">Random2</div>
  <div id="c">Random3</div>
  <div id="d">Random4</div>
</div>

所以基本上,默认情况下,选择的选项应该默认显示所有 div。当从下拉列表中选择选项时,它应该根据下拉值显示 div。 (例如:如果我选择 first 那么 Random1 应该只显示而其余的被隐藏。同样,当我选择 third 它应该只显示 Random3,仅此而已)。

我希望我很清楚。 这将是一个很大的帮助。谢谢

【问题讨论】:

  • 你试过了吗?你遇到了什么问题?
  • 请向我们展示您到目前为止所做的尝试。

标签: javascript html


【解决方案1】:

监听change事件,改变div的显示属性:

const divs = document.querySelectorAll('#default div');

document.querySelector('.select-random').addEventListener('change', () => {

  let selectedIndex = event.target.selectedIndex;  

  //if selectedIndex = 0, default is selected so all divs will be displayed, otherwise all divs will be removed
  divs.forEach(div => div.style.display = (selectedIndex === 0)? 'block':'none');
  if(selectedIndex === 0)  return;

  //the coresponding div to the selected option will be displayed
  divs[selectedIndex -1].style.display = 'block';  //-1 to componsate for the first(default) option

})
<select class='select-random'>
  <option value="" selected="selected">Default</option>
  <option value="a">first</option>
  <option value="b">second</option>
  <option value="c">third</option>
  <option value="d">fourth</option>
</select>

<div id="default">
  <div id="a">Random1</div>
  <div id="b">Random2</div>
  <div id="c">Random3</div>
  <div id="d">Random4</div>
</div>

【讨论】:

    【解决方案2】:

    这是一个没有任何外部库的解决方案。

    它的工作原理是在&lt;select&gt; 元素上为change 事件附加一个事件侦听器,然后隐藏所有&lt;div&gt;s 并仅显示选定的一个。

    const select = document.getElementById('select');
    
    select.addEventListener('change', function () {
        for (let otherDiv of document.querySelectorAll('#default div')) {
            otherDiv.style.display = 'none';
        }
        
        const div = document.getElementById(this.value);
        div.style.display = 'block';
    });
    <div id="default">
      <div id="a">Random1</div>
      <div id="b">Random2</div>
      <div id="c">Random3</div>
      <div id="d">Random4</div>
    </div>
    
    <select id="select">
      <option value="" selected="selected">Default</option>
      <option value="a">first</option>
      <option value="b">second</option>
      <option value="c">third</option>
      <option value="d">fourth</option>
    </select>

    如果你更喜欢使用 jQuery,这里有一个例子:

    $('#select').change(function () {
        $('#default div').hide();
        $('#' + $(this).val()).show();
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <div id="default">
      <div id="a">Random1</div>
      <div id="b">Random2</div>
      <div id="c">Random3</div>
      <div id="d">Random4</div>
    </div>
    
    <select id="select">
      <option value="" selected="selected">Default</option>
      <option value="a">first</option>
      <option value="b">second</option>
      <option value="c">third</option>
      <option value="d">fourth</option>
    </select>

    【讨论】:

    • @MatSz 我是否必须在此使用 CSS,因为我无法仅根据下拉值显示数据。
    • 如果您希望最初隐藏所有元素,您可以使用 CSS 或隐藏所有元素(但您的帖子另有暗示)。
    • 谢谢@MatSz。我能够获得价值,但它没有向我显示特定的 div 并且所有内容都被隐藏了。如果可能的话,我会接受你的回答,帮助我解决这个问题。谢谢
    • 你需要确保选项的值等于目标div的id。
    • @MatSz "已选择 --> r.fn.init [div#a]"。这是我得到的值,我假设它只是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多