问题描述:
除去老版本浏览器兼容性的原因,事件代理可以在捕获阶段实现吗?简单描述下过程,谢谢。
事件有两种触发类型:一种是冒泡型
;一种是捕获型
。冒泡型事件
:从目标元素开始触发,然后触发其父元素上定义的同类型事件,再然后父元素的父元素...捕获型事件
:从目标元素的父元素上定义的同类型事件开始触发,然后其子元素,直到触发目标元素上定义的事件
对于你问题描述中说的 事件代理
,应该是指不直接通过: 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之后发现就是这哥们儿之后就直接进处理过程了……
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
参考这篇文章,获得了答案:
http://www.cnblogs.com/Chen-X...