首页 > 解决方案 > EventTargets 是否需要提供相应的处理程序属性?

问题描述

我认为在实践中很好理解的是,实现的对象将EventTarget所有受支持的事件都包含on在其键中带有前缀的属性中。例如,WindowWindowEventHandlers mixin 配对,允许使用如下代码:

window.addEventListener('print', foo);

// ...or

window.onprint = foo;

但是标准是否规定每个可能的事件名称都X必须有一个关联的onX属性EventTarget?或者这只是浏览器作为历史产物碰巧遵循的约定?

标签: javascripthtmlstandards

解决方案


HTML 生活标准涵盖了这一点。

摘录

事件处理程序以两种方式公开。

第一种方式,所有事件处理程序共有的,是作为事件处理程序 IDL 属性。

第二种方式是作为事件处理程序内容属性。HTML 元素上的事件处理程序和 Window 对象上的一些事件处理程序以这种方式公开。

对于这两种方式,事件处理程序都是通过名称公开的,该名称是一个始终以“on”开头的字符串,后跟处理程序所针对的事件的名称。

IDL 和 content 属性并不能确定事件名称的分类,但由于IDL 属性在 JS 中作为属性可见而没有setAttributeorgetAttribute,那么上面的段落基本上说每个事件处理程序都必须作为带有on- 前缀名称的属性公开。

话虽如此,具有这些属性名称的 JS 对象可能不是 event 的实际目标。生活标准引用body了具有 IDL 属性的元素的一个示例,用于针对相应Window实例的处理程序......即使body元素本身实现了EventTarget.

因此,一般来说,验证目标是您的责任,但您至少可以依靠您可以在 JavaScript 源代码中设置的每个标准事件N对应onN属性。EventTarget


推荐阅读