Event: Make trigger(focus/blur/click) work with native handlers
commit6ad3651dbfea9e9bb56e608f72b4ef2f97bd4e70
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Mon, 27 Mar 2023 19:47:01 +0000 (27 21:47 +0200)
committerGitHub <noreply@github.com>
Mon, 27 Mar 2023 19:47:01 +0000 (27 21:47 +0200)
tree029d235d71ad5817af33d0b8e2925bb6b532c47a
parentce60d31893deab7d3da592b5173e90b5d50e7732
Event: Make trigger(focus/blur/click) work with native handlers

In `leverageNative`, instead of calling `event.stopImmediatePropagation()`
which would abort both native & jQuery handlers, set the wrapper's
`isImmediatePropagationStopped` property to a function returning `true`.
Since for each element + type pair jQuery attaches only one native handler,
there is also only one wrapper jQuery event so this achieves the goal:
on the target element jQuery handlers don't fire but native ones do.

Unfortunately, this workaround doesn't work for handlers on ancestors
- since the native event is re-wrapped by a jQuery one on each level of
the propagation, the only way to stop it for jQuery was to stop it for
everyone via native `stopPropagation()`. This is not a problem for
`focus`/`blur` which don't bubble, but it does also stop `click` on
checkboxes and radios. We accept this limitation.

Fixes gh-5015
Closes gh-5228
src/event.js
test/unit/event.js