ftlabs / fastclick

Polyfill to remove click delays on browsers with touch UIs
MIT License
18.66k stars 3.22k forks source link

iOS: Selects don't work with Voiceover #226

Closed betabong closed 10 years ago

betabong commented 10 years ago

This is IMHO quite a critical bug considering the amount of websites using this library:

With Fastclick activated, people using VoiceOver on iOS are not able to open a select box (popover) anymore.

Example: http://cdpn.io/blGmH Pen: http://codepen.io/betabong/pen/blGmH/

There are scenarios though that work:

matthew-andrews commented 10 years ago

Yes this would be a very serious bug although I am currently not able to reproduce it.

I'm using iOS 7.1.

Steps taken:

Also as you said using form navigation works fine.

Do I need to do any other steps or do I need a device at a different version?

matthew-andrews commented 10 years ago

I was unable to reproduce this bug so tentatively closing...

betabong commented 10 years ago

Mathew, sorry, but I can reproduce this at a 100% with all my iOS devices (7 and 7.1).

The select won't open!

I've noticed two scenarios when it would open:

a) open the input and then navigate to the select by keyboard navigation (as already mentioned) b) open the text input first, then navigate to the select and double click.

If you still can't reproduce, I'll make you a video, ok?

matthew-andrews commented 10 years ago

A video would be really helpful, thanks :)

betabong commented 10 years ago

Here you go: http://cl.ly/2S2n150n3804

matthew-andrews commented 10 years ago

Very strange - now I can reproduce it reliably.

I've looked at this and chatted to @rowanbeentje and we think that as this is a browser bug (calling .focus() on <select>s on touch events don't work when accessibility mode is on) and (unfortunately) the only fix we're going to be able to do is disable fast focusing on iOS devices.

I've made a reduced test case here: http://jsbin.com/zeqof/1/edit.

matthew-andrews commented 10 years ago

I've got a potential fix in a branch - would you mind checking it? - https://github.com/ftlabs/fastclick/pull/235/files.

Thanks!

laurentgoudet commented 10 years ago

This fix is breaking the select inputs on iOS7 (tested on both iPhone 5 & 5s) for "quick" tap (faster than the 100ms threshold) when the position of the select element on the screen is moved up because the dropdown pops up at the bottom of the screen. If the touchend is not preventDefault(), the element under the initial position of the element (if any) will get the focus, closing the select dropdown.

If there are no focusable element under to initial on-screen position of the select input it will work fine, as well as if the select input in near the top of the screen and does not move when the dropdown pops up.

The only fixes I found are:

Safari on iOS is seriously broken. It's like there are making everything they can to prevent great web experiences & push people to native apps.

madscientistmark commented 10 years ago

reviewing...

asselin commented 10 years ago

Just submitted a pull request to fix this issue.

ewout1 commented 9 years ago

I can confirm that this voiceover fix in fastclick still causes the select fields to be buggy on iphone ios8. We almost removed fastclick for it until we found this threat.