开发者社区 问答 正文

一个元素上有两个事件,在运行一个时禁止另一个?

screenshot
如图,假设代码如下:

<ul>
    <li class="a"></li>
    <li class="b"></li>
    <li class="c"></li>
    
    <div class="A"></div>
    <div class="B"></div>
    <div class="C"></div>
</ul>

// 点击A以外的元素关闭弹窗

$(document).mouseup(function(e){
    var _con = $('.A');   // 设置目标区域
      if(!_con.is(e.target) && _con.has(e.target).length === 0 ){ 
        $('A).removeClass('display-block');
      };
});

问题来了,点击a显示了A,点击A以外的元素关闭A,但是点击a的时候,看上去窗口没有关闭,其实是进行了关闭操作,紧接着进行了打开操作,如何使A窗口打开后a按钮变成关闭按钮或者失效(a失效,b有效,点击打开B),这应该和静止冒泡不是一回事吧?

展开
收起
杨冬芳 2016-06-12 14:32:02 2360 分享 版权
1 条回答
写回答
取消 提交回答
  • IT从业

    一般网站都不是你这种效果,硬要弄的话就用one来绑定。

    $(".a").one("click",function(event){
            $(".A").addClass("display-block");
            event.stopPropagation();
        })
        $(document).on("click",function(event){
            if($(event.target).closest(".A").length === 0 ){ 
                $('.A').removeClass('display-block');
            };
            $(".a").one("click",function(event){
                $(".A").addClass("display-block");
                return false;
            })
        });

    另一种方式,就是给a加一个透明遮罩层让他点不到。
    还有一种方式,实现效果一样,实际实现方式逻辑并不一样。

    $(".a").on("click",function(){
            $(".A").toggleClass("display-block");
            event.stopPropagation();
        })

    把addClass改成toggleClass,你点a看上去跟没有生效一样,其实是生效了的,效果是关闭A

    2019-07-17 19:34:01
    赞同 展开评论
问答地址: