Opera是否默认捕获事件,正确的行为是什么?

Does Opera capture events by default and what is the correct behaviour?

本文关键字:是什么 默认 是否 事件 Opera      更新时间:2023-09-26

我有一些在Opera中失败的事件代码,我将其简化为这个小测试用例。

基本上问题是,如果没有设置addEventListener的第三个参数,事件处理程序不会在Opera中运行。当点击"useCapture not set"按钮时,测试用例中的值在Firefox和Chrome中都是递增的,但在Opera中不是。

这篇(旧)文章表明Opera不同于webkit &壁虎浏览器:http://my.opera.com/hallvors/blog/2006/10/12/2006-10-12-event-capture-explained。但我不知道该怎么做。MDN说useCapture应该默认为false

是Opera中的默认true,是参数根本不是可选的,还是我错过了什么?什么是正确的行为?

如果有疑问,请参考规范,最初和现在的规范是W3C的DOM Level 2 Events。查看ECMASCript绑定页面,看起来好像useCapture参数是必需的,因为没有提到它是可选的。

DOM Level 3 Events明确提到useCapture是可选的,尽管我认为这个规范草案还没有在浏览器中得到广泛采用。

相关的MDN页面也有一个注释:

注意:useCapture仅在最新版本的主流浏览器;例如,在Firefox 6之前,它不是可选的。您应该提供该参数以获得最广泛的兼容性。

底线:始终传递这三个参数是最安全的,Opera完全有权利坚持这样做。

与DOM Level 3 Events相比的差异是一个bug,将在Opera 12中修复。