javascript - EventTargets 是否需要提供相应的处理程序属性?
问题描述
我认为在实践中很好理解的是,实现的对象将EventTarget
所有受支持的事件都包含on
在其键中带有前缀的属性中。例如,Window与WindowEventHandlers mixin 配对,允许使用如下代码:
window.addEventListener('print', foo);
// ...or
window.onprint = foo;
但是标准是否规定每个可能的事件名称都X
必须有一个关联的onX
属性EventTarget
?或者这只是浏览器作为历史产物碰巧遵循的约定?
解决方案
HTML 生活标准涵盖了这一点。
摘录:
事件处理程序以两种方式公开。
第一种方式,所有事件处理程序共有的,是作为事件处理程序 IDL 属性。
第二种方式是作为事件处理程序内容属性。HTML 元素上的事件处理程序和 Window 对象上的一些事件处理程序以这种方式公开。
对于这两种方式,事件处理程序都是通过名称公开的,该名称是一个始终以“on”开头的字符串,后跟处理程序所针对的事件的名称。
IDL 和 content 属性并不能确定事件名称的分类,但由于IDL 属性在 JS 中作为属性可见而没有setAttribute
orgetAttribute
,那么上面的段落基本上说每个事件处理程序都必须作为带有on
- 前缀名称的属性公开。
话虽如此,具有这些属性名称的 JS 对象可能不是 event 的实际目标。生活标准引用body
了具有 IDL 属性的元素的一个示例,用于针对相应Window
实例的处理程序......即使body
元素本身实现了EventTarget
.
因此,一般来说,验证目标是您的责任,但您至少可以依靠您可以在 JavaScript 源代码中设置的每个标准事件N
对应onN
属性。EventTarget
推荐阅读
- arrays - 如何遍历数组并将每个项目分配给每个字典键
- gnupg - 在脚本中使用传递的 gpg 密码作为变量
- excel - .EntireRow.Delete 在 Excel VBA 中不起作用
- r - 用 Rvest 刮名字
- java - 为什么 setExact() 警报管理器方法忽略了我的间隔时间?
- windows-10 - VS 2019 在使用 Windows 10 版本 1803 时无法显示 UWP 设计器(SDK 可以工作吗?)
- python - 如何诊断 Google App Engine Flask 内存泄漏
- amazon-cloudformation - 使用带有“Ref”的 Fn::Join
- html - 如何更改活动部分的文本颜色
- android - 调用 getItemCount 时 RecyclerView 未调用 onCreateViewHolder 方法