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

Mat*_*hew 18 javascript jquery

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

它是保证blur()(失去焦点的第一个元素)的事件发生之前focus()事件(其它元素得到焦点)?

gui*_*ido 27

从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
Run Code Online (Sandbox Code Playgroud)

请注意,不能有两个焦点元素的陈述并不完全正确; 虽然我不知道允许两个小部件同时关注的桌面环境,但规范允许实现决定:

其他规范可以定义比本说明书中描述的更复杂的焦点模型,包括允许多个元素具有当前焦点.

这也值得一提:

一种宿主语言可以定义哪些可能接收焦点的特定元素,其下的元件的条件可以接收焦点,通过该聚焦装置可以被改变,并且该顺序的焦点变化.(斜体是我的).

但是,请注意Chrome不符合标准 - 而是订单blur, focusout, focus, focusin.您可以使用此页面对此进行测试.Webkit浏览器可能存在同样的问题.在focusinfocusout自事件支持火狐52.