Javascript之事件的委托

本文介绍了事件委托(事件代理)的概念及其应用场景,并通过一个具体的案例展示了如何利用事件的冒泡机制来实现对多个子元素的点击事件管理,从而提高代码效率。

1、什么是事件的委托/事件代理

    利用了事件的冒泡传播机制(触发当前元素的某个行为,它父级所有元素的相关行为都会被触发),如果一个容器中有很多元素都要绑定点击事件,我们没有必要一个个的绑定了,只需要给最外层的容器绑定一个点击事件即可,在这个方法执行的时候,通过事件源的区分来进行不同的操作;

 

案例:

body, div, span {
    margin: 0;
    padding: 0;
    font-size: 14px;
}

html, body {
    width: 100%;
    height: 100%;
    overflow: hidden;
}

#box {
    position: absolute;
    left: 50%;
    top: 51px;
    width: 100px;
    height: 30px;
    margin-left: -50px;
    line-height: 30px;
    text-align: center;
    border: 1px solid #2489ce;
}

#mark {
    position: absolute;
    top: 30px;
    left: -1px;
    width: 300px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    background-color: lightyellow;
    border: 1px solid #2489ce;
}
<div id="box">
    <span>购物车</span>
    <div id="mark" style="display: none;">查看购物车中的详细信息</div>
</div>

<script type="text/javascript">
    var box = document.getElementById('box');
    var mark = document.getElementById('mark');

    document.body.onclick = function (e) {
        e = e || window.event;
        e.target = e.target || e.srcElement;

        //如果点击的是box或者是box下的span,我们判断,ark是否显现,或者隐藏
        if(e.target.id === 'box' ||
                e.target.tagName.toLocaleLowerCase() === "span"
                && e.target.parentNode.id === "box"){
            if(mark.style.display === 'none'){
                mark.style.display = 'block';
            }else {
                mark.style.display = 'none';
            }
            return;
        }

        //如果事件源是#mark,不进行任何的操作
        if(e.target.id === 'mark'){
            return;
        }
        //以上都不是的话,我们直接隐藏
        mark.style.display = 'none';
    }

</script>

转载于:https://my.oschina.net/u/3419199/blog/1504236

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值