假设我有两个输入字段 一个人有焦点,然后我点击另一个输入字段。
是保证 blur()
事件(失去焦点的第一个元素)在<{strong> focus()
事件之前发生了(其他元素得到了重点)?
答案 0 :(得分:23)
从W3C草案DOM3 Events开始,规范告诉您:
焦点事件顺序
本规范中定义的焦点事件以设定顺序发生 相对于彼此。以下是典型的序列 焦点在元素之间移动时的事件(此顺序假设 没有元素最初聚焦):
> 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
。您可以使用this page对此进行测试。 Webkit浏览器可能存在同样的问题。自Firefox 52以来支持focusin
和focusout
个事件。
答案 1 :(得分:0)
我会说是的。否则,两个元素可能同时具有焦点,这是永远不可能的。