事件捕获和事件冒泡详解

事件的绑定

addEventListener 和事件绑定on的区别
    addEventListener可以给一个元素绑定多个相同的事件,且保证全都会被执行
    使用on绑定的多个事件会被最后一个事件覆盖

移除事件绑定:removeEventListener

事件捕获和冒泡

事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。
相反的,事件冒泡是自下而上的去触发事件。
绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。
true,事件捕获;false,事件冒泡。默认false,即事件冒泡。
Jquery的ev.stopPropagation()/ev.cancelBubble = true来阻止冒泡,不让事件继续冒泡。意思就是到我为止,父辈和爷爷辈的事件就不要触发了。
实例:
    <div class="box">
        <div class="mid">
            <div class="item"></div>
        </div>
    </div>
    <script type="text/javascript">
        var box = document.getElementsByClassName("box")[0];
        var mid = document.getElementsByClassName("mid")[0];
        var item = document.getElementsByClassName("item")[0];

        box.addEventListener("click",function(){
            console.log("小明的爷爷");
        },false);
        mid.addEventListener("click",function(){
            console.log("小明的爸爸");
        },false);
        item.addEventListener("click",function(ev){
            console.log("小明");
        },false);
    </script>
结果:
    小明
    小明的爸爸
    小明的爷爷
结论:事件的触发顺序自内向外,这就是事件冒泡。
        box.addEventListener("click",function(){
            console.log("小明的爷爷");
        },true);
        mid.addEventListener("click",function(){
            console.log("小明的爸爸");
        },true);
        item.addEventListener("click",function(ev){
            console.log("小明");
        },true);
结果:
    小明的爷爷
    小明的爸爸
    小明
结论:事件触发顺序变更为自外向内,这就是事件捕获

阻止事件冒泡

    item.addEventListener("click",function(ev){
        // 取消冒泡 不让事件继续冒泡 阻止事件冒泡
        1.ev.cancelBubble = true;
        2.stopPropagation();// 2

        // 兼容写法
        if (ev.stopPropagation) {
            ev.stopPropagation();
        } else {
            ev.cancelBubble = true;
        }


        console.log("小明");

        // 阻止默认事件
        // ev.preventDefault();
        // ev.returnValue = false;
        // return false;
    },false);
结果:
    小明
结论:当阻止事件冒泡,只会触发子类事件(节点)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值