0

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

我试过了,它工作正常。

根据 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);
}
4

2 回答 2

1

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

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

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

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

参考

于 2013-09-09T15:57:37.720 回答
0

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

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

于 2016-10-20T04:24:16.800 回答