【问题标题】:How to displaying and hiding again the div after clicking a button单击按钮后如何再次显示和隐藏div
【发布时间】:2016-03-09 12:40:20
【问题描述】:

我想在单击按钮后显示一个隐藏的 div,方法是添加一个额外的类 addClass("open");,然后在它处于活动状态时使用 css 显示它们 open 类。

$(".btt").click(function(event){
   ($(event.currentTarget).parent().parent()).addClass("open");
});
.surveySummaryList>li .surveySummaryMenu {
  background: rgba(0, 0, 0, 0.6);
  position:absolute;
  left: 100%;
  top: 0;
  display: none;
  color: white;
  width: 100%;
  min-width: 250px;
  z-index: 1001;
}

.surveySummaryList>li.open >.surveySummaryMenu {
  display: inherit;
  transition: all 1s;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul class="nav surveySummaryList">
  <li>
    <a href="javascript:" data-bind="click: $root.surveyClicked">
      <span>Name</span>
      <button class=" btt pull-right glyphicon glyphicon-chevron-right"></button>
    </a>
    <div class="surveySummaryMenu">
      <ul class="nav navbar">
        <li>
          <a href="javascript:" data-bind="click: $root.surveyClicked">
             <span> Sub Name </span>
          </a>
        </li>
      </ul>
    </div>
  </li>
</ul>

只有当我点击按钮时,div class= surveySummaryMenu 才会显示,即使我点击这个&lt;a&gt; 标签,它也不应该显示。似乎可以工作,但是在单击按钮后, div .surveySummaryMenu 将永远保留,单击其他位置而不是按钮后如何再次隐藏它?

【问题讨论】:

  • 为什么要在锚点内放一个按钮?,你不需要任何数据绑定属性,而不是使用 parent(),你可以给 div 一个 id 或一个类想要定位然后选择它,最后你选择的 div 里面的任何东西都会继承它的父事件。
  • 因为我只想在单击按钮时显示隐藏 div。即使我点击 a 标签,它也不应该显示

标签: javascript jquery html css


【解决方案1】:

当要将event对象用于event.currentTarget时,需要将其传递给回调函数。

像这样:

$(".btt").click(function(event) {

工作代码:

$(".btt").click(function() {
  $(this).parent().parent().addClass("open");
});

$('.nav a').click(function(event) {
  event.stopPropagation();
});

$(document).on('click', function() {
  $('.open').removeClass('open');
});
.surveySummaryList>li .surveySummaryMenu {
  background: rgba(0, 0, 0, 0.6);
  position:absolute;
  left: 100%;
  top: 0;
  display: none;
  color: white;
  width: 100%;
  min-width: 250px;
  z-index: 1001;
}

.surveySummaryList>li.open >.surveySummaryMenu {
  display: inherit;
  transition: all 1s;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<ul class="nav surveySummaryList">
  <li>
    <a href="javascript:" data-bind="click: $root.surveyClicked">
      <span>Name</span>
      <button class=" btt pull-right glyphicon glyphicon-chevron-right"></button>
    </a>
    <div class="surveySummaryMenu">
      <ul class="nav navbar">
        <li>
          <a href="javascript:" data-bind="click: $root.surveyClicked">
            <span> Sub Name </span>
          </a>
        </li>
      </ul>
    </div>
  </li>
</ul>

注意顺便说一句,您可以使用$(this) 代替$(event.currentTarget) - 我已更改代码,以便您可以在 sn-p 中看到它。

【讨论】:

  • 感谢 Mosh,它起作用了,我想再问一个问题:现在当我们点击按钮时,新的 div 显示出来了,很清楚。但我猜它会永远留在那里。点击其他地方后如何再次隐藏它们,例如
  • 我更新了答案。让我知道你是否同意。
  • 它仍然可以工作,但我可以用这个代码代替 Mosh 吗? !($(".btt")).click(function(){ $('.open').removeClass('open'); });
  • 我试过但它不起作用,但我认为这可能是一种解决方案,这意味着每当我点击其他地方而不是按钮 .btt 时,应该删除打开的类,也许语法错误,我不知道
  • 我不明白it not working 什么究竟不起作用?你能创建一个bin 处理这个问题吗?
猜你喜欢
  • 2021-06-14
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2013-01-16
  • 2016-05-21
  • 1970-01-01
相关资源
最近更新 更多