我在 iOS 上遇到了一个问题,我为此做了一个小提琴:
如果为任何触摸事件(touchstart/touchmove/touchend)添加了一个事件监听器到文档中,像这样:
function onTouch( e ){};
document.addEventListener( 'touchstart', onTouch, false );
这导致输入字段在 iOS 上具有以下行为:
- 第一次触摸:输入获得焦点,用户可以正确输入
- 随后的触摸(关注已经到位的字段):打字不再起作用
我在 iPad 和 iPhone(模拟器和实际设备)上的 iOS 5、5.1 和 6 上遇到并测试了这个问题。
唯一的修复似乎是删除事件侦听器以恢复输入字段的正确行为(或者实际上根本不添加侦听器):
document.removeEventListener( 'touchstart', onTouch);
我还注意到,如果页面上有多个 iframe,其中一个将侦听器添加到其文档中,它也会破坏另一个 iframe 的输入字段。
小提琴在我的 Android 手机上运行正常。
任何想法为什么会发生这种情况?或者如何在不破坏 iOS 输入的情况下为触摸事件设置全局自定义事件处理程序?