【问题标题】:show/hide divs based on drop-downs with dynamically generated id基于动态生成的 id 的下拉菜单显示/隐藏 div
【发布时间】:2015-11-04 12:07:20
【问题描述】:

我正在尝试设置一种机制,在该机制中,我在页面上有多个选择下拉菜单,然后是根据活动选择显示或隐藏的 div。这些下拉菜单和 div 及其值是从数据库中动态提取的。

目前,我正在使用以下 jquery 脚本。

jQuery(document).ready(function () {

    jQuery(".drop-down-show-hide").hide();

    jQuery("#dropDown").change(function () {
       jQuery(".drop-down-show-hide").hide(); 
       jQuery("#" + this.value).show();
    });
  });

还有下面的html代码;

<select id="dropDown">
<option>Select...</option>
<option value="choice-1">Choice 1</option>
<option value="choice-2">Choice 2</option>
<option value="choice-3">Choice 3</option>
</select>
<div id="choice-1" class="drop-down-show-hide">content</div>
<div id="choice-2" class="drop-down-show-hide">content</div>
<div id="choice-3" class="drop-down-show-hide">content</div>

<select id="dropDown">
<option>Select...</option>
<option value="choice-4">Choice 4</option>
<option value="choice-5">Choice 5</option>
</select>
<div id="choice-4" class="drop-down-show-hide">content</div>
<div id="choice-5" class="drop-down-show-hide">content</div>

这样,只有第一个下拉菜单可以按需要工作:选择其中一个选项将显示该选项并隐藏其他选项。另一个下拉菜单不起作用 - 它不会显示选项 4 或 5。它也不会隐藏选项 1-3,所以这个下拉菜单根本不起作用。

我真正想要实现的行为是每个下拉列表仅显示/隐藏作为选项提供的 div。我应该能够根据数据库为每个下拉列表提供一个唯一的 id,所以你会有类似的东西;

<select id="uniquevalue1">
<select id="uniquevalue2">

然后,我的问题是如何定制 jquery 以便它可以读取和处理唯一值。我无法将唯一 id 值硬编码到脚本中(就像我对 dropDown 所做的那样),因为它们是从数据库中动态提取的。有没有办法重写 jquery 以将所需的行为应用于页面,还是其他方式?

【问题讨论】:

  • 用class代替id
  • 谢谢,这使得第二个下拉菜单工作,但现在我需要解决将显示/隐藏机制限制为仅包含在下拉菜单中的 div 的下一步。

标签: jquery html css drop-down-menu show-hide


【解决方案1】:

selectid 改为class。 idDOM 中应该始终是唯一的。但是class可以应用于多个元素

DEMO

<select class="dropDown">
      ...
</select>
<select class="dropDown">
     ....
</select>

然后你的相同代码就可以工作了!


更新

为了满足您当前的要求,我建议您将下拉列表分组如下:

<div class="group"> <!--group each select and subsequent divs into a container-->
    <select class="dropDown">
        <option>Select...</option>
        <option value="choice-1">Choice 1</option>
        <option value="choice-2">Choice 2</option>
        <option value="choice-3">Choice 3</option>
    </select>
    <div id="choice-1" class="drop-down-show-hide">content1</div>
    <div id="choice-2" class="drop-down-show-hide">content2</div>
    <div id="choice-3" class="drop-down-show-hide">content3</div>
</div>
<div class="group"> <!--Same here for 2nd dropdown-->
    <select class="dropDown">
        <option>Select...</option>
        <option value="choice-4">Choice 4</option>
        <option value="choice-5">Choice 5</option>
    </select>
    <div id="choice-4" class="drop-down-show-hide">content4</div>
    <div id="choice-5" class="drop-down-show-hide">content5</div>
</div>

JS你可以在change事件中更新一行:

jQuery(".dropDown").change(function () {
       jQuery(this).closest('.group').find(".drop-down-show-hide").hide(); 
       //find select's parent and hide its corresponding divs only
       jQuery("#" + this.value).show();
});

DEMO

【讨论】:

  • 虽然——还是少了一块。现在两个下拉菜单都在工作,但他们隐藏了其他人的 div。这就是我最后描述的。我希望下拉菜单只隐藏作为选项给出的 div,我的理论是,最好的方法是使用唯一的 id(或类)作为下拉菜单。然后向 jquery 描述这些标识符。
  • 随时@astrosa 快乐编码.. :)
猜你喜欢
  • 1970-01-01
  • 2017-12-16
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2016-02-21
  • 1970-01-01
  • 2018-01-05
相关资源
最近更新 更多