【问题标题】:Show/Hide multiple DIVs with Select using jQuery使用 jQuery 选择显示/隐藏多个 DIV
【发布时间】:2010-11-27 15:15:22
【问题描述】:

我基本上和下面问题中的人有同样的情况:

链接:how to show/hide divs by select.(jquery)

通过在 Google 中的广泛搜索,我想出了几种不同的方法,人们声称他们的方法有效。我还没有让任何东西正常工作。我对 jQuery 的了解还不够,无法完全理解如何从头开始编写它,因此我现在依赖非常好的示例。

我一直在尝试使用的内容(基于我找到并尝试过的示例)是这样的:

<script type="text/javascript">
    (document).ready(function() {
        ('.box').hide();<br/>
        ('#dropdown').change(function() {
        ('#divarea1')[ ($(this).val() == 'area1') ? 'hide' : 'show' ]()
        ('#divarea2')[ ($(this).val() == 'area2') ? 'hide' : 'show' ]()
        ('#divarea3')[ ($(this).val() == 'area3') ? 'hide' : 'show' ]()
        });
    });
</script>
<form>
    <select id="dropdown" name="dropdown">
        <option value="0">Choose</option>
        <option value="area1">DIV Area 1</option>
        <option value="area2">DIV Area 2</option>
        <option value="area3">DIV Area 3</option>
    </select>
</form>
<div id="divarea1" class="box">DIV Area 1</div>
<div id="divarea2" class="box">DIV Area 2</div>
<div id="divarea3" class="box">DIV Area 3</div>
  • 注意:我使用括号而不是 html 周围的小于和大于号来正确显示此消息。

当我测试这个时我得到了什么:

  • 首次加载时未选择任何内容 => 不显示 DIV。
  • 当我选择 DIV 区域 1 => 显示 DIV 区域 2 和 3。
  • 当我选择 DIV 区域 2 => 显示 DIV 区域 1 和 3。
  • 当我选择 DIV 区域 3 => 显示 DIV 区域 1 和 2。

我的大脑一天都炸了。我该怎么做才能解决这个问题?

【问题讨论】:

  • 不是您问题的答案,而是探索 jQuery#toggle 方法以进行条件隐藏/显示。

标签: jquery select html hide show


【解决方案1】:

我会这样做:

<script type="text/javascript">
$(document).ready(function(){
 $('.box').hide();
  $('#dropdown').change(function() {
    $('.box').hide();
    $('#div' + $(this).val()).show();
 });
});
</script>
<form>
 <select id="dropdown" name="dropdown">
  <option value="0">Choose</option>
  <option value="area1">DIV Area 1</option>
  <option value="area2">DIV Area 2</option>
  <option value="area3">DIV Area 3</option>
 </select>
</form>
<div id="divarea1" class="box">DIV Area 1</div>
<div id="divarea2" class="box">DIV Area 2</div>
<div id="divarea3" class="box">DIV Area 3</div>

【讨论】:

  • 阅读您建议的代码后,我意识到在我的三行中,例如: ('#divarea1')[ ($(this).val() == 'area1') ? '隐藏' : '显示' ]();我最初忘记了尾随的分号。这可能导致了我遇到的一些问题。但是,我尝试了您的代码,它的性能正是我想要的。谢谢!
  • 如果你有你的答案,你能否通过检查数字旁边的标记来结束这个问题,谢谢:)
  • 如果您想在页面加载时显示与下拉列表的选定项对应的 div,这将如何工作?也就是说,我在服务器端设置所选项目,然后在呈现页面时,显示适当的 div(与所有或都不显示)。谢谢!
  • @Mark Richman:如果您将选定的属性添加到选项服务器端,那么只需将其添加到$('.box').hide(); 行下方(在文档准备功能内)......$('#div' + $('#dropdown').val()).show();跨度>
【解决方案2】:

@fudgey 给出了一个很好的解决方案。但毫无疑问。这将取决于值,并且需要每次更改 属性 ID 的 &lt;div&gt;

所以我会这样做 `

    $(document).ready(function() {
        $('.box').hide();
        $('#dropdown').change(function() {      
            var selectedIdx = (0 == $(this).attr("selectedIndex"))? '' :                 $(this).attr("selectedIndex");
            if("" != selectedIdx){
                $('#divarea'+ selectedIdx ).hide().siblings().show();
            } else {
                $('.box').hide();
            }        
        });
    });
</script>
<form>
    <select id="dropdown" name="dropdown">
        <option value="0">Choose</option>
        <option value="area1">DIV Area 1</option>
        <option value="area2">DIV Area 2</option>
        <option value="area3">DIV Area 3</option>
    </select>
</form>
<div id="divarea1" class="box">DIV Area 1</div>
<div id="divarea2" class="box">DIV Area 2</div>
<div id="divarea3" class="box">DIV Area 3</div>
</html>`

【讨论】:

    【解决方案3】:

    交换显示/隐藏,使其看起来像这样:

    $('#divarea1')[ ($(this).val() == 'area1') ? 'show' : 'hide' ]()
    

    【讨论】:

    • 我很抱歉在我最初发布时没有发现这个......在我的工作代码中,美元符号存在。当我发布我的代码时,它们一定已经被剥离了。
    【解决方案4】:

    这段代码更简洁一点:

    $(document).ready
    (
      function()
      {
        $("div.box").hide();
        $("#dropdown").change
        (
          function()
          {
            var selectedValue = $(this).val();
            if(selectedValue !== "0")
            {
              $("div.box").show();
              $("#div" + selectedValue).hide();
            }   
          }   
        );
      }
    };
    

    本质上,如果选择了一个值(即,该选项未设置为“Choose”),则显示所有 div.box 元素。然后隐藏与所选选项匹配的 DIV。这应该发生得足够快,以至于闪光不明显。

    【讨论】:

    • 你可能误会了。我根本不希望最初显示任何 DIV 元素。我只希望在做出选择后显示 ONE。
    • @Thomas Grant:$("div.box").hide() 页面加载的元素不是吗?
    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多