Opened 8 years ago
Closed 8 years ago
#16978 closed defect (fixed)
[regression] TextBox: can't focus widget with placeHolder on iOS
Reported by: | bill | Owned by: | bill |
---|---|---|---|
Priority: | undecided | Milestone: | 1.9 |
Component: | Dijit | Version: | 1.9.0a1 |
Keywords: | Cc: | ||
Blocked By: | Blocking: |
Description (last modified by )
Noticed on test_validate.html on my iPad that clicking the textbox labeled "TextBox with placeholder" doesn't focus the textbox or open the keyboard. It works on Chrome/mac.
I'll look at this initially since it started w/my [31012] check in.
Change History (4)
comment:1 Changed 8 years ago by
Description: | modified (diff) |
---|---|
Milestone: | tbd → 1.9 |
Status: | new → assigned |
Summary: | TextBox: can't focus widget with placeHolder on iOS → [regression] TextBox: can't focus widget with placeHolder on iOS |
comment:2 Changed 8 years ago by
Version: | 1.8.3 → 1.9.0a1 |
---|
comment:3 Changed 8 years ago by
comment:4 Changed 8 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Fixed in [31192], but I wrote the wrong version number. On touchend on the placeholder, focus immediately, rather than delayed by a this.defer(), so that the keyboard pops up.
Note: See
TracTickets for help on using
tickets.
Since the click event occurs on the placeHolder <span> rather than the <input>, we need to programmatically focus to <input>.
On touch, iOS fires both touchdown/touchup and mousedown/mouseup. Previously the mousedown event triggered the call to _onFocus(), and then _FormWidgetMixin._onFocus() called focus() on the <input>, which was apparently working.
Now, touchstart triggers the call to _onFocus(), and then on touchend, _FormWidgetMixin._onFocus() calls this.defer("focus") (see [30663]), which seems to have no effect. No affect if I delay the focus call until after the mousedown comes in either. I can get it to work though by *not* delaying the focus() call.
iOS is known to intentionally ignore focus() calls (or at least, to not popup the keyboard just because focus is changed programatically), so all this code seems fragile. In the long term it would be better to use the native placeHolder when available. Unfortunately IIUC it's not available on IE9, let alone older versions of IE.