A powerful cross-platform UI toolkit for building native-quality iOS, Android, and Progressive Web Apps with HTML, CSS, and JavaScript.
fix(input): scroll assist no longer fires duplicate click events (#31124)
Issue number: resolves #30412 --------- ## What is the current behavior? When a user listener bound to `ion-input` or `ion-item` receives a tap that requires scroll assist to scroll the input into view, the click handler fires twice. Programmatic `setFocus()` and keyboard focus into an offscreen input also dispatch a phantom click event the developer didn't request. The cause is `scroll-assist.ts`: after `relocateInput` moves the native input, a RAF-scheduled `componentEl.click()` re-emits a click on the host. That recovery was added in #22845 (Feb 2021) to fix #21871, when scroll assist drove focus from its own touchstart/touchend listeners and `relocateInput` ran during the in-flight click event's lifecycle. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The RAF recovery click is removed. #25848 (Sep 2022) restructured scroll assist to react to `focusin` rather than drive focus from touch events, so `relocateInput` now runs strictly after the click event has finished propagating. Combined with `ion-input`'s click capture handler and `ion-item`'s click-on-padding handler from #30373 (April 2025), the click is always dispatched on the component host before scroll assist runs. Re-firing it produced duplicate clicks for user interactions and phantom clicks for programmatic and keyboard focus. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information Regression coverage in `core/src/components/input/test/item/scroll-assist-double-click.e2e.ts` covers four cases on iOS Mobile Safari and Mobile Chrome: padding click, direct input click, programmatic `setFocus()`, and keyboard focus. The first two assert one click event; the last two assert zero. All four fail without this change and pass with it. Preview: - https://ionic-framework-git-fw-6540-ionic1.vercel.app/src/utils/input-shims/hacks/test?ionic:mode=ios
S
Shane committed
4670996a41e406cc831f0982923d3bde7572eb88
Parent: e0862e3
Committed by GitHub <noreply@github.com>
on 5/8/2026, 12:53:53 PM