DOM:用户交互是否可能发生在除元素节点之外的任何事情上?

时间:2014-01-24 05:02:38

标签: javascript events w3c

在W3C浏览器规范中,有很多用户交互事件。按键,点击,鼠标移动等

大多数发生在window对象(mousemove)上,但其中一些发生在元素(click)上。

除了窗口对象或元素之外,是否有任何时间发生事件?

例如,是否可以通过浏览器在文本节点上调度click事件?

是否有哪些节点类型与哪些事件类型相对应的列表?

1 个答案:

答案 0 :(得分:2)

  

除了窗口对象或元素之外,是否有任何时间发生事件?

DOM 3 Event Types可以出现在文档 defaultView 对象上,并且有一长串Legacy Event Types可以在更广泛的范围内发生节点类型。

虽然绝大多数DOM 3事件都有一个元素作为事件目标,但不应该假设事件目标总是一个元素。任何类型的节点都可以调度事件(即可以是事件目标)。在Interface Node的12种节点类型中,11种不是元素。

W3C DOM规范定义了与各种类型节点关联的事件类型,但这并不限制可以作为事件目标的节点类型:

  

注意:虽然可以为任何事件目标注册事件侦听器   在用户代理上,用户代理仅调度UA生成的(受信任)事件   定义为特定事件目标类型的节点类型   事件类型(请参阅DOM3事件类型列表)。例如,a   在文本节点上注册的mouseover事件类型永远不会被触发   用户代理,虽然内容作者可以调度事件   通过脚本在文本节点上键入。

Document Object Model (DOM) Level 3 Events Specification (Draft) §4.3

因此,即使W3C没有为非元素节点指定标准事件,它们也可能在未来,内容作者(开发人员)可以从非元素节点调度事件(并且已经能够为某些节点执行此操作)时间)。

此外,浏览器不仅限于W3C规范中的那些事件,他们可以做他们喜欢的事情。

  

是否可以通过浏览器在文本节点上调度click事件

是的,早期版本的Safari就是这么做的。但是,它与其他浏览器不符,所以它被更改为符合常见行为。