是否保证在焦点()聚焦到新元素之前发生blur()事件?

时间:2013-12-02 23:40:49

标签: javascript jquery

假设我有两个输入字段 一个人有焦点,然后我点击另一个输入字段。

保证 blur()事件(失去焦点的第一个元素)在<{strong> focus()事件之前发生了(其他元素得到了重点)?

2 个答案:

答案 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以来支持focusinfocusout个事件。

答案 1 :(得分:0)

我会说是的。否则,两个元素可能同时具有焦点,这是永远不可能的。