dom事件委托(事件冒泡)

事件流在DOM中分为三个阶段:事件捕捉、目标阶段和冒泡阶段。JavaScript代码只能处理捕获或冒泡之一。addEventListener是W3C标准,attachEvent是IE特有,且其事件处理顺序与addEventListener相反。实际开发中,通常只关注冒泡阶段,而onblur等事件不支持冒泡。
摘要由CSDN通过智能技术生成
事件流:

事件流包含三个阶段:
事件捕捉阶段:事件开始由顶层对象触发,然后逐级向下传播,直到目标元素;

dom->html->body->元素

处于目标阶段:处在绑定事件的元素上;
事件冒泡阶段:事件由具体的元素先接收,然后逐级向上传播,直到不具体的元素;

元素->body->html->dom

注意:

1.js代码只能执行捕获或者冒泡其中一个阶段

2.onclick和attachEvent只能得到冒泡阶段

attachEvent说明:

  • attachEvent是IE有的方法,它不遵循W3C标准,而其他的主流浏览器如FF等遵循W3C标准的浏览器都使用addEventListener,所以实际开发中需分开处理。
  • 多次绑定后执行的顺序是不一样的,attachEvent是后绑定先执行,addEventListener是先绑定先执行。
obj.attachEvent('onclick',function(){{alert('1');});               obj.attachEvent('onclick',function(){{alert('2');});
obj.attachEvent('onclick',function(){{alert('3');});
//执行顺序是alert(3),alert(2),alert(1);
//兼容处理elm绑定的元素,evType绑定的事件类型,fn事件处理函数,useCapture(使用捕获)事件处理阶段
function addEvent(elm, evType, fn, useCapture) 
{
    if (elm.addEventListener) 
    {
        // W3C标准
        elm.addEventListener(evType, fn, useCapture);
        return true;
    }
    else if (elm.attachEvent) 
    {
        //IE
        var r = elm.attachEvent(‘on‘ + evType, fn);//IE5+
        return r;
    }
    else 
    {
        elm['on' + evType] = fn;//DOM事件
    }
}

3.addeventListener(type,listener[,useCapture])第三个参数是true便是处于捕获阶段调用事件处理,false处于冒泡(默认)

4.实际开发很少用到捕获只关注冒泡

5.事件没有冒泡,onblur,onfocus,onmouseenter,onmouseleave

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值