Skip to content

fix(): scroll assist no longer prevents first click event from firing#22845

Merged
liamdebeasi merged 2 commits into
masterfrom
sa-click
Feb 1, 2021
Merged

fix(): scroll assist no longer prevents first click event from firing#22845
liamdebeasi merged 2 commits into
masterfrom
sa-click

Conversation

@liamdebeasi
Copy link
Copy Markdown
Contributor

Pull request checklist

Please check if your PR fulfills the following requirements:

  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been reviewed and added / updated if needed (for bug fixes / features)
  • Build (npm run build) was run locally and any changes were pushed
  • Lint (npm run lint) has passed locally and any fixes were made for failures

Pull request type

Please check the type of change your PR introduces:

  • Bugfix
  • Feature
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • Documentation content changes
  • Other (please describe):

What is the current behavior?

Issue Number: #21871

What is the new behavior?

  • Moving the input/focusing during touchstart seems to cancel the first click event, so we need to manually fire it ourselves.

Does this introduce a breaking change?

  • Yes
  • No

Other information

@github-actions github-actions Bot added the package: core @ionic/core package label Feb 1, 2021
@liamdebeasi liamdebeasi merged commit f7d4c21 into master Feb 1, 2021
@liamdebeasi liamdebeasi deleted the sa-click branch February 1, 2021 18:00
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: core @ionic/core package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant