浏览器事件默认操作 - 是不是有规范?

Posted

技术标签:

【中文标题】浏览器事件默认操作 - 是不是有规范?【英文标题】:Browser events default action - Is there a spec for it?浏览器事件默认操作 - 是否有规范? 【发布时间】:2022-01-14 09:52:30 【问题描述】:

某些events 具有默认操作。例如 - 单击复选框将选中/取消选中它。这可以通过event.preventDefault() 方法防止。

在寻找 errorEvent 默认操作时,我找不到任何有关事件默认操作的文档或规范 - 不仅适用于 errorEvent,而且适用于任何事件。根据DOM spec - Constructing events scetion

截至撰写本文时,Web IDL 尚未定义任何默认行为;参见whatwg/webidl#135。

除此之外,我找不到任何关于此类规范的任何进展的明确或最新信息。 是否有可能这样的规范仍未最终确定,因此不同浏览器的默认操作可能会有所不同?还是我错过了什么?

更新:

我的问题不够清楚 - 很明显,一个事件对于不同的上下文可以有不同的默认操作(例如,复选框输入的点击事件与文本输入的点击事件具有不同的默认操作)

感谢@kaiido 的详尽回答,我找到了我正在寻找的规范(专门针对 DOM UI 事件)-UI Events section 4.1 List of Event Types

【问题讨论】:

html5 规范确实在特定元素语义定义的上下文中描述了事件应该做什么。 我特指事件默认操作。我找不到这种东西的任何规格。它存在吗?您能否提供此类规范的链接? 规范中的每个 HTML 元素定义都描述了当触发给定类型的事件时浏览器应该做什么。 你要找的东西也没有意义。 <div> 上的“点击”事件没有默认操作,而单选按钮上的“点击”事件则有。单选按钮默认操作不同于复选框默认操作和<select> 默认操作。 请参阅我的问题的“更新”部分 【参考方案1】:

每种事件类型都没有真正的“默认操作”,所以不,您不会找到“点击”事件的默认操作,也不会找到“错误”事件的默认操作。 发生的情况是,在各个地方,都定义了一个事件(注意小写的“e”)之后,应该发生一些事情,其中可能会调度一个事件,然后可能别的东西,基于被调度的事件的canceled flag。

如果你喜欢看规格,那么DOM specifications 定义当an event is being dispatched 时,用户代理必须检查调度事件的取消标志,如果它仍然未设置,那么它必须运行目标的activation behavior(步骤 11.1)。 此激活行为是其他规范将定义的,因此与您正在寻找的“默认行为”相对应。 请注意,UI Events 还使用不同的术语详细描述了相同的行为。

此外,许多规范可能有自己定义此行为的方式,例如WebGL's contextlost event 直接定义了在没有定义激活行为的情况下事件被取消时应该发生的情况,这在 WebGL 上下文中意义不大。

因此,没有一个地方可以定义所有此类“可预防”的行为。每个规范都可以定义其中的许多。 浏览器的互操作性得以保留,因为它们遵循所有定义这些规范的规范。

可能有趣的是,您的复选框示例实际上是一个局外人,因为由于奇怪的历史原因,切换 .checked 属性的默认操作是在调度事件之前完成的,并且在事件被调度之后如果事件被取消,它正在恢复到初始状态。

【讨论】:

感谢您的详尽回答!在查看了您提到的 UIEvent 规范之后,我惊讶地发现,每个事件都有一个默认操作列表(在某些假设下)。请参阅第 4.1 节 - “事件类型列表” - 默认操作列 w3c.github.io/uievents/#event-types-list @yuval.bl 是的,好地方,但请注意,这仅涉及 UI 受信任事件,远非详尽的列表。 明白了,谢谢。

以上是关于浏览器事件默认操作 - 是不是有规范?的主要内容,如果未能解决你的问题,请参考以下文章

阻止事件冒泡和默认到事件对象在不同浏览器中的传递

eventDom

javascript事件相关3

二十事件入门

第24章 事件入门

如何规范跨浏览器的 CSS3 过渡结束事件?