根据下拉菜单中的选择更改 div 的内容

IT技术 javascript jquery html forms
2021-03-10 12:47:16

有没有一种简单的方法,使用 JavaScript,<div>根据用户从下拉菜单中的选择动态显示/隐藏内容例如,如果用户选择option 1然后我希望<div>显示 1 并<div>隐藏所有其他s。

编辑:示例HTML设置

<select>
<option> Option 1</option>
<option> Option 2</option>
<option> Option 3</option>
<select>

<div id="content_1" style="display:hidden;">Content 1<div>
<div id="content_2" style="display:hidden;">Content 2<div>
<div id="content_3" style="display:hidden;">Content 3<div>
6个回答

接受的答案有几个缺点:

  • 不要在 JavaScript 代码中定位 ID。使用类和数据属性来避免重复您的代码
  • 在加载时使用 CSS 隐藏而不是使用 JavaScript 是一种很好的做法——以支持非 JavaScript 用户,并防止加载时显示隐藏闪烁。

考虑到上述情况,您的选项甚至可以有不同的值,但切换相同的类:

<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;
}

这是一个 JSFiddle来查看它的运行情况。

啊。哇,我觉得自己很傻,我以为 JSfiddle 自动包含了它。好的,到时候就好了。顺便说一下,我设法让我的本地版本也能正常工作,谢谢。
2021-04-16 12:47:16
@Lee 如果您检查 JavaScript 控制台,您会看到$ is not defined这意味着 jQuery 尚未加载到您的小提琴上。在 JSFiddle 上,添加https://code.jquery.com/jquery-1.11.3.js到左侧的外部资源。
2021-04-18 12:47:16
我的一个似乎不起作用的任何原因?jsfiddle.net/fuvxkzkd - 奇怪的是,在我的本地站点上运行的版本似乎可以部分工作,但是如果选择了另一个,它不会将“隐藏”类添加到选项元素中,因此它只是添加到显示的行
2021-04-25 12:47:16

这是一个 jsfiddle,其中包含通过选择显示/隐藏 div 的示例。

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();
  })
});
jsfiddle 不起作用!返回 404。顺便说一句,jquary 需要任何编译器吗?
2021-05-05 12:47:16

零 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>

代码笔

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>

嗯太慢了。无论如何,这是我的例子:)
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();
        }
    });
});
可能想在你的小提琴中隐藏加载的元素。
2021-04-21 12:47:16
@rybo111 是的,我可以,但是如果您选择空选项,它会再次显示它们,因此它可能是一个功能。
2021-04-22 12:47:16
OP 在他的问题中将它们隐藏在负载中,因此这就是预期的效果。
2021-05-04 12:47:16

我不是编码员,但您可以节省几行:

<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>

这是演示