【问题标题】:selective stoppropagation jquery选择性停止传播jQuery
【发布时间】:2012-07-19 02:58:46
【问题描述】:

Javascript 代码:

$(".div1").click(function(event){
    event.stopPropagation();
    $(".div1 div").slideToggle();
});

$(".div2").click(function(event){
    event.stopPropagation ();
    $(".div2 div").slideToggle();
});

$(document).click(function(event){
    $(".div1 div,.div2 div").slideUp();
});

假设我点击.div1 & .div1 div 向下滑动。然后我点击.div2 但是当event.stopPropagation 被执行时,.div1 div 不会向上滑动。所以我该怎么做?我不想把这段代码$(".div1 div").slideUp(); 放在这样的 div 太多时没有意义

【问题讨论】:

  • 你想要实现什么,切换 div?上/下?
  • 好的,我举个例子。我想让它像 Facebook 好友请求、消息、通知一样工作。单击“通知”,通知 div 向下滑动,然后单击“消息”,通知 div 向上滑动,消息 div 向下滑动

标签: jquery stoppropagation


【解决方案1】:

永远不要使用Event.stopPropagation()。任何应用程序的所有层都应该始终能够在任何时候记录发生的事件。

改为使用event.target 并使用.closest() 遍历来实现相同的效果。

以下将处理无限数量的 DIV,因此您无需重写代码。 (PS:只需在您的父元素中添加一个.box 以使一切更简单)

$(".box").on("click", function(event){
  const $div = $(this).find('div');
  $('.box > div').not($div).slideUp();
  $div.slideToggle();
});

$(document).on("click", function(event){
  if (!$(event.target).closest(".box").length) {
    $(".box > div:visible").slideUp();
  }
});
/*QuickReset*/ * {margin:0; box-sizing:border-box;}

.box{
  background:#eee;
  width:160px;
  padding:10px 0;
  margin:10px;
}
.box h2{
  cursor:pointer;
}
.box div{
  display:none;
  background:#aaa;
  color:#cf5;
}
Click on 'body' to close opened DIVs
  
<div class="div1 box">
  <h2>DIV 1</h2>
  <div>Lorem <br>Ipsum<br>....</div>
</div>
  
<div class="div2 box">
  <h2>DIV 2</h2>
  <div>Lorem <br>Ipsum<br>....</div>
</div>
  
<div class="div3 box">
  <h2>DIV 3</h2>
  <div>Lorem <br>Ipsum<br>....</div>
</div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

【讨论】:

  • 演示显示的不是我的要求。当我单击 Div1 时,它会切换,然后当我单击 Div2 时,Div1 不会向上切换。我想让它像 Facebook 好友请求、消息、通知一样工作。单击“通知”,通知 div 向下滑动,然后单击“消息”,通知 div 向上滑动,消息 div 向下滑动
  • @iThink 抱歉误解了您的问题。 我已经重新编辑了我的答案看看,让我知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多