事件流中的事件捕获

Ie下是没有的捕获事件的,在绑定事件中,标准下是有的

首先来回顾一下事件冒泡

<body>
    <div id="div1">
        <div id="div2">
            <div id="div3"></div>
        </div>
    </div>
</body>
window.onload = function() {

    var oDiv1 = document.getElementById('div1');
    var oDiv2 = document.getElementById('div2');
    var oDiv3 = document.getElementById('div3');

    function fn1() {
        alert( this.id );
    }

    oDiv1.onclick = fn1;
    oDiv2.onclick = fn1;
    oDiv3.onclick = fn1;
    //我们点击div3,会依次弹出div3,div2,div1
    //false = 冒泡
    //也可以用下面这种方式,会有同样的效果
    //告诉div1,如果有一个出去的事件触发了你,你就去执行fn1这个函数
    /*oDiv1.addEventListener('click', fn1, false);
    oDiv2.addEventListener('click', fn1, false);
    oDiv3.addEventListener('click', fn1, false);*/

下来我们来认识一下事件捕获是什么样子的,同样是上面的代码,只不过事件绑定换成以下方式。我们点击div3,依次弹出div1,div2,div3。

<body>
    <div id="div1">
        <div id="div2">
            <div id="div3"></div>
        </div>
    </div>
</body>
window.onload = function() {        
    var oDiv1 = document.getElementById('div1');
    var oDiv2 = document.getElementById('div2');
    var oDiv3 = document.getElementById('div3');

    function fn1() {
        alert( this.id );
    }       
    //告诉div1,如果有一个进去的事件触发了你,你就去执行fn1这个函数
    //true = 捕获
    oDiv1.addEventListener('click', fn1, true);
    oDiv2.addEventListener('click', fn1, true);
    oDiv3.addEventListener('click', fn1, true);

事件捕获:和事件冒泡相反,不太具体地节点应该更早接收到事件,而最具体的节点应该最后接收到事件。
注意:事件执行的顺序是先捕获在冒泡
思考题,如下点击div3,弹出来的数字依次是什么?321

window.onload = function() {        
    var oDiv1 = document.getElementById('div1');
    var oDiv2 = document.getElementById('div2');
    var oDiv3 = document.getElementById('div3');

    function fn1() {
        alert( this.id );
    }           
    oDiv1.addEventListener('click', function() {
        alert(1);
    }, false);
    oDiv1.addEventListener('click', function() {
        alert(3);
    }, true);
    oDiv3.addEventListener('click', function() {
        alert(2);
    }, false);  
}

好了,事件捕获就说到这里,不知道小伙伴们都看懂了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值