我可以在同一个元素上附加捕获和泡泡阶段事件处理程序吗?

时间:2013-05-06 15:05:48

标签: javascript dom javascript-events

我可以在同一个元素上附加捕获和泡泡阶段事件处理程序(可能是不同的或相同的函数)吗?

我尝试了它并且工作正常。

是否允许按照W3C? 我没有看到DOM3事件规范中提到的任何限制或限制。

有人可以澄清一下吗?

var divList = document.getElementsByTagName('div');
var eventHandler = function(event){
console.log(event.currentTarget);
}
for(var index=0; index < divList.length; index++){
divList[index].addEventListener('click',eventHandler,true);
divList[index].addEventListener('click',eventHandler,false);
}

2 个答案:

答案 0 :(得分:1)

是的,将事件绑定到两个阶段都是allowed。以下是一些非常有用的实例:

  • 以编程方式填写表单字段
  • 表单提交事件的程序化排队
  • 多个选择元素的程序化同步
  

某些事件,例如焦点,不会冒泡,但可以捕获。   目标元素上的内联处理程序在目标元素的捕获处理程序之前触发。

     

Web平台中的许多新指定的事件(例如媒体事件)都没有冒泡,这对依赖于事件委派的Ember这样的框架来说是一个问题。但是,在IE9中添加的捕获API可以针对所有事件正确调用,并且不需要规范化层。支持捕获API不仅允许我们删除jQuery依赖项,而且它将允许我们正确处理这些非冒泡事件。这将允许您使用诸如在组件中播放之类的事件,而无需手动设置事件侦听器。

<强>参考

答案 1 :(得分:0)

是的但是应该不鼓励,你应该处理触发回调中其他事件/调用函数的逻辑。

很少有一个用例,其中一个元素需要多个相同的事件类型。