儿童事件的事件停止传播问题

时间:2017-04-03 01:53:53

标签: jquery stoppropagation

我遇到了jquery停止传播的问题。 要在我点击除购物车模式以外的页面时关闭购物车模式,我必须这样做:

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

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

        });

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

$(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>

1 个答案:

答案 0 :(得分:0)

而不是你正在做什么(用一个停止传播绑定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();
 });

您的活动现在将正确宣传并显示:无;&#39;如果您在cart-block元素中单击

,则无法添加到购物车区块

编辑:如果最外层的课程名为&#39; mycart&#39;,您可以尝试这样:

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

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