JavaScript 冒泡事件 / 事件的传播

冒泡事件

定义

子级标签触发事件,JavaScript中,父级程序默认也会触发相同类型的事件,这样的效果,称为冒泡事件。

规则

只与标签在HTML中的层级关系有关,与css和显示效果无关
执行顺序,都是从当前标签向父级元素,执行
实际的标签的捕获顺序是有区别的:
 	IE浏览器是 从 子级向父级 获取标签,称为   冒泡机制
 	其他浏览器 是 从 父级向子级 获取标签,称为  捕获机制
 	虽然获取标签的方式不一样
 	但是现在所有的执行顺序都是从当前标签向父级标签执行

阻止事件的传播 / 阻止冒泡事件

语法规则

事件对象.stopPropagation()

哪个标题有阻止冒泡事件代码,冒泡事件的执行就到这个标签为止
只触发自己身上的事件,不会触发 父级标签 相同类型的事件
只管自己,谁写,谁不触发,子级父级都不管,就自己触发自己的事件

兼容处理

低版本IE浏览器 会有兼容问题。

兼容语法:
事件对象.cancelBubble = true;   阻止冒泡事件,阻止事件的传播
if(事件对象.stopPropagation){
    事件对象.stopPropagation();
}
else{
    事件对象.cancelBubble = true;
}

实例

css样式:
.box{
    width: 400px;
    height: 400px;
    background: blue;
}

.middle{
    width: 300px;
    height: 300px;
    background: green;
}
.inner{
    width: 200px;
    height: 200px;
    background: orange;
}

html:

<div class="box">
    <div class="middle">
        <div class="inner"></div>
    </div>
</div>

<script>
var oDivBox = document.querySelectorAll('div')[0];
var oDivMiddle = document.querySelectorAll('div')[1];
var oDivInner = document.querySelectorAll('div')[2];


oDivBox.onclick = function(e){
    e = e || window.event;
    console.log('我是box-div触发的事件');
    // 阻止冒泡事件  / 阻止事件的传播
    // 给最外层加载,只是阻止当前标签,触发父级标签的事件
    // 不影响,子级标签,触发父级标签事件
    // 阻止当前div,触发父级标签的事件
    // 但是不影响子级的两个div标签
    // e.stopPropagation();

    if(e.stopPropagation){
        e.stopPropagation();
    }else{
        e.cancelBubble = true;
    }
};

oDivMiddle.onclick = function(e){
    e = e || window.event;
    console.log('我是middle-div触发的事件');
    // e.stopPropagation();

    if(e.stopPropagation){
        e.stopPropagation();
    }else{
        e.cancelBubble = true;
    }
};

oDivInner.onclick = function(e){
    e = e || window.event;
    console.log('我是inner-div触发的事件');
    // e.stopPropagation();

    if(e.stopPropagation){
        e.stopPropagation();
    }else{
        e.cancelBubble = true;
    }

};


document.onclick = function(){
    console.log('我是document');
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值