【问题标题】:event stop propagation issue with children event子事件的事件停止传播问题
【发布时间】:2017-04-03 01:53:52
【问题描述】:

我对 jquery 停止传播有疑问。 要在我点击页面时关闭购物车模式,但购物车模式除外,我必须这样做:

        $('html').click(function() {
            $('.cart-block').css('display','none');
        });

        $('.mycart, .cart-block').click(function(event){
            event.stopPropagation();

        });

但是我有一个问题,我有一个 AJAX 调用来删除我的购物车 div(购物车块)中的一个项目,但是停止传播正在停止事件。

$(document).on('click', '.deleteItem', function() {
    //ajax call
});

有人可以帮助我吗? 多谢 (对不起我的英语)

编辑:HTML 结构 //按钮购物车

  <div class="center cart mycart" >
           //icon and cart item counter
            </div>

        <div id="cartcaption" class="cart-block">
    //modal : content of the cart
<div class="productsPanier">
 <span id="{{$cart->rowId}}" class="deleteItem">delete</span>
    </div>
</div>

【问题讨论】:

  • 能否请您展示一下您的 HTML 结构?
  • 是的,我更新了帖子,谢谢:)

标签: jquery stoppropagation


【解决方案1】:

而不是你在做什么(绑定 2 个处理程序,一个停止传播),只需绑定一个处理程序并检查事件目标是否具有类 .cart-block

所以是这样的:

$('html').click(function(event) {
   if (!$(event.target).hasClass('cart-block'))
      $('.cart-block').css('display','none');
});

并删除以下部分

 $('.mycart, .cart-block').click(function(event){
    event.stopPropagation();
 });

您的事件现在将正确传播,并且“显示:无;”如果您在购物车块元素中单击,则不会被添加到购物车块中

编辑:如果最外面的类名为“mycart”,您也可以这样尝试:

$('html').click(function(event) {
   if (!($(event.target).closest('.mycart').length))
      $('.cart-block').css('display','none');
});

这将检查您点击的目标元素是否具有类“mycart”的父元素。此解决方案假定您在购物车内单击的任何内容都有一个带有“mycart”类的容器。显然,如果没有看到你的 DOM,我不能确定这会解决你的具体情况。如果它与我的假设不同,它至少应该为您指明正确的方向。

【讨论】:

  • 感谢您的回答,但它不起作用,因为如果您在另一类的购物车内单击它会关闭购物车。
  • 查看我的编辑。只要您始终单击“mycart”的子项(这意味着所有可单击区域实际上都是“mycart”容器的子项),这将适用于所有情况。如果您有可以直接单击的“mycart”的某些部分(即,单击它们时,事件目标是“mycart”而不是“mycart”的子项,那么您必须添加“或”在 if 语句中处理。
  • 我只需要添加两个类 .closest('.mycart, .cart-block'),一个用于购物车按钮,一个用于购物车模式
  • 抱歉,没有看到您之前发布的 DOM。是的,因为 .cart-block 不是 .mycart div的孩子,所以这是要走的路,在我的回答中,我认为它是一个孩子。没问题 ;) 如果问题由此解决,请将答案标记为有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 2012-10-10
  • 2011-04-06
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多