在将焦点赋予新元素时,是否可以保证blur()事件发生在focus()之前?
假设我有两个输入字段。
一个人有焦点,然后我点击另一个输入字段。
是否保证 blur()
事件(失去焦点的第一个元素)发生在 focus()
事件之前(其他元素得到焦点)?
从W3C草案DOM3事件开始 ,该规范告诉您:
焦点事件顺序
本说明书中定义的焦点事件以相对于彼此的设定顺序发生。 以下是焦点在元素之间移动时的典型事件序列(此顺序假定最初没有元素聚焦):
> User shifts focus > 1. focusin Sent before first target element receives focus > 2. focus Sent after first target element receives focus > User shifts focus > 3. focusout Sent before first target element loses focus > 4. focusin Sent before second target element receives focus > 5. blur Sent after first target element loses focus > 6. focus Sent after second target element receives focus
请注意,不能有两个具有焦点的元素的声明并不完全正确; 虽然我不知道允许两个小部件同时关注的桌面环境,但规范允许实现决定:
其他规范可以定义比本说明书中描述的更复杂的焦点模型,包括允许多个元素具有当前焦点。
这也值得一提:
主语言可以定义可以接收焦点的特定元素,元素可以获得焦点的条件,可以改变焦点的手段以及焦点改变的顺序 。 (斜体是我的)。
但是,请注意Chrome不符合标准 – 而是顺序是blur, focusout, focus, focusin
。 您可以使用此页面对此进行测试。 Webkit浏览器可能有同样的问题。 自Firefox 52以来,支持focusin
和focusout
事件。
我会说是的。 否则,两个元素可能同时具有焦点,这是永远不可能的。