javascript - 事件代理可以在捕获阶段实现吗?
黄舟
黄舟 2017-04-11 12:20:02
[JavaScript讨论组]

问题描述:

除去老版本浏览器兼容性的原因,事件代理可以在捕获阶段实现吗?简单描述下过程,谢谢。

试验链接:http://jsbin.com/rimiruhutu/e...

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
伊谢尔伦

参考这篇文章,获得了答案:

对于事件代理来说,在事件捕获或者事件冒泡阶段处理并没有明显的优劣之分,但是由于事件冒泡的事件流模型被所有主流的浏览器兼容,从兼容性角度来说还是建议大家使用事件冒泡模型。

http://www.cnblogs.com/Chen-X...

天蓬老师

事件有两种触发类型:一种是冒泡型一种是捕获型
冒泡型事件:从目标元素开始触发,然后触发其父元素上定义的同类型事件,再然后父元素的父元素...
捕获型事件:从目标元素的父元素上定义的同类型事件开始触发,然后其子元素,直到触发目标元素上定义的事件

对于你问题描述中说的 事件代理 ,应该是指不直接通过: domEle.addEventListener(event , fn , type) 这种方式定义,而是通过 loginEvent(domEle , event , fn , type) 这种方式去定义,就是委托第三方来定义事件。

如果是这样的话,你的这个现象应该类似下面这种:

// 事件代理(第三方注册事件的函数|对象)
function loginEvent(domEle , event , fn , type){
    domEle.addEventListener(event , fn , type);
}

// 注意第三个参数:表示是在捕获阶段触发
btn.addEventListener('click' , function(){
    // 按下这个按钮的时候:从 btn 的最顶级父元素上的 click 事件开始
    // 触发,然后直到 btn 上定义的 click 事件触发
    // 事件代理开始工作.....
    loginEvent(domEle , event , fn , type);    
} , true);

不知道对否??

阿神

这跟冒泡阶段代理没啥不一样吧。。。
只不过事件发生的阶段变了。。。

伊谢尔伦

个人以为事件捕获更适合“提前”处理的场景,比如有些时间是需要在父元素上处理但是不需要子元素参与、或者是需要避免子元素触发事件这种情况。但如果是事件监听这种用法,如果把事件绑定到父元素上,那么事件在触发时并没有到达子元素,也就无法判定是不是需要处理……不像是事件冒泡,子元素事件触发时一级级往上冒,碰到挂着事件监听的父元素时停下来,然后父元素核验了target之后发现就是这哥们儿之后就直接进处理过程了……

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号