fix(item): emit click event once when clicking padded space on item and emit correct element#30373
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
brandyscarney
commented
Apr 25, 2025
brandyscarney
commented
Apr 25, 2025
brandyscarney
commented
Apr 25, 2025
3 tasks
ShaneK
approved these changes
Apr 30, 2025
Member
ShaneK
left a comment
There was a problem hiding this comment.
Looks good! I only had two comments, but I they're more just for my own confirmation than change requests
|
Super cool! :D |
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.
Issue number: resolves #29758 resolves #29761
What is the current behavior?
When an
ion-itemhas a click event listener, the following issues occur:ion-checkbox,ion-toggle,ion-radio,ion-textarea,ion-input) triggers the click event twice.ion-inputandion-textarea, clicking their native inputs reports the wrong element as the event target.native-wrapperofion-inputemits a separate click event with an incorrect target element.What is the new behavior?
firstInteractive.click()in Item for all interactives (no longer excludes input/textarea).ion-input/ion-textareainstead of the native input elements.native-wrappertriggering its own click event when clicking on its padding.Does this introduce a breaking change?
Other information
Dev build:
8.5.6-dev.11745613928.16440384Previews: