]> source.dussan.org Git - jquery.git/commit
Event: Simulate focus/blur in IE via focusin/focusout
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 27 Mar 2023 19:22:38 +0000 (21:22 +0200)
committerGitHub <noreply@github.com>
Mon, 27 Mar 2023 19:22:38 +0000 (21:22 +0200)
commitce60d31893deab7d3da592b5173e90b5d50e7732
treee1373262623de3b80867669f397513e48246c974
parent992a1911d0b6195012edc25fd5a48810d4be64b5
Event: Simulate focus/blur in IE via focusin/focusout

In IE (all versions), `focus` & `blur` handlers are fired asynchronously
but `focusin` & `focusout` are run synchronously. In other browsers, all
those handlers are fired synchronously. Asynchronous behavior of these
handlers in IE caused issues for IE (gh-4856, gh-4859).

We now simulate `focus` via `focusin` & `blur` via `focusout` in IE to avoid
these issues. This also let us simplify some tests.

This commit also simplifies `leverageNative` - with IE now using `focusin`
to simulate `focus` and `focusout` to simulate `blur`, we don't have to deal
with async events in `leverageNative`. This also fixes broken `focus` triggers
after first triggering it on a hidden element - previously, `leverageNative`
assumed that the native `focus` handler not firing after calling the native
`focus` method meant it would be handled later, asynchronously, which
was not the case (gh-4950).

Fixes gh-4856
Fixes gh-4859
Fixes gh-4950
Closes gh-5223

Co-authored-by: Richard Gibson <richard.gibson@gmail.com>
src/event.js
test/unit/event.js