扫码关注官方订阅号
问题描述:
除去老版本浏览器兼容性的原因,事件代理可以在捕获阶段实现吗?简单描述下过程,谢谢。
试验链接:http://jsbin.com/rimiruhutu/e...
人生最曼妙的风景,竟是内心的淡定与从容!
参考这篇文章,获得了答案:
对于事件代理来说,在事件捕获或者事件冒泡阶段处理并没有明显的优劣之分,但是由于事件冒泡的事件流模型被所有主流的浏览器兼容,从兼容性角度来说还是建议大家使用事件冒泡模型。
http://www.cnblogs.com/Chen-X...
事件有两种触发类型:一种是冒泡型;一种是捕获型。冒泡型事件:从目标元素开始触发,然后触发其父元素上定义的同类型事件,再然后父元素的父元素...捕获型事件:从目标元素的父元素上定义的同类型事件开始触发,然后其子元素,直到触发目标元素上定义的事件
冒泡型
一种是捕获型
冒泡型事件
捕获型事件
对于你问题描述中说的 事件代理 ,应该是指不直接通过: domEle.addEventListener(event , fn , type) 这种方式定义,而是通过 loginEvent(domEle , event , fn , type) 这种方式去定义,就是委托第三方来定义事件。
事件代理
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之后发现就是这哥们儿之后就直接进处理过程了……
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
参考这篇文章,获得了答案:
http://www.cnblogs.com/Chen-X...
事件有两种触发类型:一种是
冒泡型;一种是捕获型。冒泡型事件:从目标元素开始触发,然后触发其父元素上定义的同类型事件,再然后父元素的父元素...捕获型事件:从目标元素的父元素上定义的同类型事件开始触发,然后其子元素,直到触发目标元素上定义的事件对于你问题描述中说的
事件代理,应该是指不直接通过:domEle.addEventListener(event , fn , type)这种方式定义,而是通过loginEvent(domEle , event , fn , type)这种方式去定义,就是委托第三方来定义事件。如果是这样的话,你的这个现象应该类似下面这种:
不知道对否??
这跟冒泡阶段代理没啥不一样吧。。。
只不过事件发生的阶段变了。。。
个人以为事件捕获更适合“提前”处理的场景,比如有些时间是需要在父元素上处理但是不需要子元素参与、或者是需要避免子元素触发事件这种情况。但如果是事件监听这种用法,如果把事件绑定到父元素上,那么事件在触发时并没有到达子元素,也就无法判定是不是需要处理……不像是事件冒泡,子元素事件触发时一级级往上冒,碰到挂着事件监听的父元素时停下来,然后父元素核验了target之后发现就是这哥们儿之后就直接进处理过程了……