fix(input, textarea): inputs now scroll into view when tapping labels#25848
Merged
liamdebeasi merged 7 commits intofeature-7.0from Sep 9, 2022
Merged
fix(input, textarea): inputs now scroll into view when tapping labels#25848liamdebeasi merged 7 commits intofeature-7.0from
liamdebeasi merged 7 commits intofeature-7.0from
Conversation
sean-perkins
approved these changes
Sep 9, 2022
2 tasks
pull Bot
pushed a commit
to LoadsAForks/ionic-framework
that referenced
this pull request
May 8, 2026
…ic-team#31124) Issue number: resolves ionic-team#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 ionic-team#22845 (Feb 2021) to fix ionic-team#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. ionic-team#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 ionic-team#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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request checklist
Please check if your PR fulfills the following requirements:
ionic-docsrepo, in a separate PR. See the contributing guide for details.npm run build) was run locally and any changes were pushednpm run lint) has passed locally and any fixes were made for failuresPull request type
Please check the type of change your PR introduces:
What is the current behavior?
Issue URL: N/A When fixing #18532 I noticed that using the accessory bar or a label to focus inputs did not cause scroll assist to activate. This is because scroll assist was listening for
touchendevents on the input element itself to determine when to activate. This code was added a while ago (ionic-team/ionic-v3@c10f72b) and may have had to work around platform level bugs which may be whytouchendwas used instead offocusin.What is the new behavior?
focusineventDoes this introduce a breaking change?
Other information
Tapping label before and after
before.MP4
after.MP4
Accessory bar next/prev before and after
before.MP4
after.MP4