Change the content of a div based on selection from dropdown menu

后端 未结 6 625
粉色の甜心
粉色の甜心 2020-11-30 00:14

Is there a simple way, using JavaScript, to dynamically show/hide content in a

based on the users selection from a drop down menu? For example, if a
相关标签:
6条回答
  • 2020-11-30 00:27

    The accepted answer has a couple of shortcomings:

    • Don't target IDs in your JavaScript code. Use classes and data attributes to avoid repeating your code.
    • It is good practice to hide with CSS on load rather than with JavaScript—to support non-JavaScript users, and prevent a show-hide flicker on load.

    Considering the above, your options could even have different values, but toggle the same class:

    <select class="div-toggle" data-target=".my-info-1">
      <option value="orange" data-show=".citrus">Orange</option>
      <option value="lemon" data-show=".citrus">Lemon</option>
      <option value="apple" data-show=".pome">Apple</option>
      <option value="pear" data-show=".pome">Pear</option>
    </select>
    
    <div class="my-info-1">
      <div class="citrus hide">Citrus is...</div>
      <div class="pome hide">A pome is...</div>
    </div>
    

    jQuery:

    $(document).on('change', '.div-toggle', function() {
      var target = $(this).data('target');
      var show = $("option:selected", this).data('show');
      $(target).children().addClass('hide');
      $(show).removeClass('hide');
    });
    $(document).ready(function(){
        $('.div-toggle').trigger('change');
    });
    

    CSS:

    .hide {
      display: none;
    }
    

    Here's a JSFiddle to see it in action.

    0 讨论(0)
  • 2020-11-30 00:31

    Meh too slow. Here's my example anyway :)
    http://jsfiddle.net/cqDES/

    $(function() {
        $('select').change(function() {
            var val = $(this).val();
            if (val) {
                $('div:not(#div' + val + ')').slideUp();
                $('#div' + val).slideDown();
            } else {
                $('div').slideDown();
            }
        });
    });
    
    0 讨论(0)
  • 2020-11-30 00:32

    I am not a coder, but you could save a few lines:

    <div>
                <select onchange="if(selectedIndex!=0)document.getElementById('less_is_more').innerHTML=options[selectedIndex].value;">
                    <option value="">hire me for real estate</option>
                    <option value="me!!!">Who is a good Broker? </option>
                    <option value="yes!!!">Can I buy a house with no down payment</option>
                    <option value="send me a note!">Get my contact info?</option>
                </select>
            </div>
    
    <div id="less_is_more"></div>
    

    Here is demo.

    0 讨论(0)
  • 2020-11-30 00:40

    With zero jQuery

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <style>
    .inv {
        display: none;
    }
        </style>
        <body>
            <select id="target">
                <option value="">Select...</option>
                <option value="content_1">Option 1</option>
                <option value="content_2">Option 2</option>
                <option value="content_3">Option 3</option>
            <select>
    
            <div id="content_1" class="inv">Content 1</div>
            <div id="content_2" class="inv">Content 2</div>
            <div id="content_3" class="inv">Content 3</div>
            
            <script>
                document
                    .getElementById('target')
                    .addEventListener('change', function () {
                        'use strict';
                        var vis = document.querySelector('.vis'),   
                            target = document.getElementById(this.value);
                        if (vis !== null) {
                            vis.className = 'inv';
                        }
                        if (target !== null ) {
                            target.className = 'vis';
                        }
                });
            </script>
        </body>
    </html>
    

    Codepen

    document
      .getElementById('target')
      .addEventListener('change', function () {
        'use strict';
        var vis = document.querySelector('.vis'),   
          target = document.getElementById(this.value);
        if (vis !== null) {
          vis.className = 'inv';
        }
        if (target !== null ) {
          target.className = 'vis';
        }
    });
    .inv {
        display: none;
    }
    <!DOCTYPE html>
    <html>
        <head>
        <meta charset="utf-8"/>
            <title></title>
        </head>
        <body>
            <select id="target">
                <option value="">Select...</option>
                <option value="content_1">Option 1</option>
                <option value="content_2">Option 2</option>
                <option value="content_3">Option 3</option>
            <select>
    
            <div id="content_1" class="inv">Content 1</div>
            <div id="content_2" class="inv">Content 2</div>
            <div id="content_3" class="inv">Content 3</div>
        </body>
    </html>

    0 讨论(0)
  • 2020-11-30 00:40

    There are many ways to perform your task, but the most elegant are, I believe, using css. Here are basic steps

    1. Listening option selection event, biding adding/removing some class to container action, which contains all divs you are interested in (for example, body)
    2. Adding styles for hiding all divs except one.
    3. Well done, sir.

    This works pretty well if there a few divs, since more elements you want to toggle, more css rules should be written. Here is more general solution, binding action, base on following steps: 1. find all elements using some selector (usually it looks like '.menu-container .menu-item') 2. find one of found elements, which is current visible, hide it 3. make visible another element, the one you desire to be visible under new circumstances.

    javascript it a rather timtoady language )

    0 讨论(0)
  • 2020-11-30 00:45

    here is a jsfiddle with an example of showing/hiding div's via a select.

    HTML:

    <div id="option1" class="group">asdf</div>
    <div id="option2" class="group">kljh</div>
    <div id="option3" class="group">zxcv</div>
    <div id="option4" class="group">qwerty</div>
    <select id="selectMe">
      <option value="option1">option1</option>
      <option value="option2">option2</option>
      <option value="option3">option3</option>
      <option value="option4">option4</option>
    </select>
    

    jQuery:

    $(document).ready(function () {
      $('.group').hide();
      $('#option1').show();
      $('#selectMe').change(function () {
        $('.group').hide();
        $('#'+$(this).val()).show();
      })
    });
    
    0 讨论(0)
提交回复
热议问题