【问题标题】:Conditionally Show or Hide Secondary Twitter-Bootstrap Drop-Menu Depending on Master Drop-Menu Selection根据主下拉菜单选择有条件地显示或隐藏辅助 Twitter-Bootstrap 下拉菜单
【发布时间】:2019-11-25 14:00:07
【问题描述】:

我非常熟悉使用 Angular 时有条件地隐藏或显示元素。我对直接使用 HTML 和 JS 不太熟悉。我有一个使用 twitter-bootstrap 3.4.0 的 HTML 页面。对于这个 HTML 页面,我最初想显示一个主下拉菜单。然后,根据用户所做的选择,我想有条件地显示几个二级下拉菜单之一。这是我的主下拉菜单 HTML:

<div class="dropdown">
  <button class="btn btn-default btn-primary dropdown-toggle" type="button" data-toggle="dropdown"
    onclick="loadCategoryList()">
    Select Job Category
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" id="selectCategory"></ul>
</div>

这里是被引用的 JS:

let selectCat = document.getElementById("selectCategory");

// Load category list into drop-menu
async function loadCategoryList() {
  const categoryArr = ["option 1", "option 2", "option 3", "emailer"];
  while (selectCat.firstChild) {
    selectCat.removeChild(selectCat.firstChild);
  }
  for (let i = 0; i < categoryArr.length; i++) {
    let opt = categoryArr[i];
    let a = document.createElement("a");
    a.textContent = opt;
    a.setAttribute('href', '#');
    a.setAttribute('class', 'btn btn-link');
    let li = document.createElement("li");
    li.appendChild(a);
    selectCat.appendChild(li);
  }
}

然后我有一个二级下拉菜单 div 节点,如下所示:

<div class="dropdown">
  <button class="btn btn-default btn-primary dropdown-toggle" type="button" data-toggle="dropdown"
    onclick="loadEmailersList()">
    Select Email Type
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" id="selectEmailer"></ul>
</div>

我想要做的改变是,如果从主类别列表下拉菜单中选择的是“emailer”,我只想显示这个辅助“emailer”div 节点。换句话说,“emailer”下拉菜单节点应该被隐藏,并且只有在主类别列表下拉菜单中的选择等于“emailer”时才可见。

我不清楚这种情况在 HTML 和 JS 中发生了多少。如何使用 HTML、JS 和 Bootstrap 完成此任务?

【问题讨论】:

  • Hey Muirik ????,您是否有机会将其压缩成一个稍小的 sn-p 或在有问题的地方发表评论。如果您可以将其作为可运行堆栈 sn-p 注入,则可以加分 :)
  • 我使用的是 Bootstrap 3.4.0。我减小了 sn-p 的大小。基本上,如果用户从初始下拉菜单列表中选择“emailer”,我只希望显示“emailer”的 div 节点。最初,否则它应该保持隐藏状态。
  • 例如,这是一个 pastbin 的堆栈 sn-p 启动器,您可以将其包含在您的答案中。但是如果你这样做,你会发现很难运行(因此可能会调试)。如果您可以使其进入可运行状态,那将非常有帮助
  • 我在上面进行了更改,以便您可以看到菜单项数组。
  • 我现在已经把它拿出来了。这只会在辅助下拉菜单中用于将值填充到文本字段中。

标签: javascript html twitter-bootstrap-3


【解决方案1】:

要修改元素的可见性,可以使用jQuery的.hide()、.show()或.toggle()

您还可以确定which item was clicked in a dropdown menu

要开始隐藏,您可以使用 style="display: none;" 之类的东西

加起来应该有点像这样:

// handle click event on dropdown menu item
$('#category .dropdown-menu').on('click', 'li a', function(e) {
  
  // determine which item was selected
  var selText = $(this).text();
  
  // determine whether email box should be visible
  var showEmail = selText === "Email"

  // show/hide visibility
  $('#box').toggle(showEmail);
});
#category, #box {
  margin: 10px;
}
#box {
    width: 200px;
    height: 100px;
    background: cornflowerblue;
    color: white;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 5rem;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>

<div class="dropdown" id="category">
  <button class="btn btn-default dropdown-toggle" id="dropdownMenu1" 
          type="button" data-toggle="dropdown" 
          aria-haspopup="true" aria-expanded="true">
    Pick Category
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
    <li><a href="#">Email</a></li>
    <li><a href="#">Another action</a></li>
    <li><a href="#">Something else here</a></li>
  </ul>
</div>

<div id="box" style="display: none;"> Email </div>

【讨论】:

  • 谢谢。澄清一下,不使用 jQuery 就没有办法做到这一点吗?
  • 嗯,你可以,但是引导程序无论如何都需要 jquery,所以你应该已经将它作为依赖项加载
  • 对。使用 jQuery 做这件事是否比不使用 jQuery 更简洁?
  • 是的,我的意思是如果你只是想使用 vanilla js 显示/隐藏一个元素,我不建议从头开始添加 jQuery,但由于你已经支付了加载它的成本,所以没有世界上不使用它的理由 - 我认为语法更简洁
猜你喜欢
  • 2017-10-06
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
相关资源
最近更新 更多