【发布时间】:2012-10-29 15:10:04
【问题描述】:
我在 iOS 上遇到了一个问题,我已经解决了这个问题:
如果为任何触摸事件(touchstart/touchmove/touchend)在文档中添加了事件监听器,如下所示:
function onTouch( e ){};
document.addEventListener( 'touchstart', onTouch, false );
这导致输入字段在 iOS 上具有以下行为:
- 第一次触摸:输入获得焦点,用户可以正确输入
- 随后的触摸(焦点在已经存在的字段上):打字不再起作用
我正在 iOS 5、5.1 和 6 以及 iPad 和 iPhone(模拟器和实际设备)上遇到并测试此问题。
唯一的解决方法似乎是删除事件侦听器以恢复输入字段的正确行为(或者实际上根本不添加侦听器):
document.removeEventListener( 'touchstart', onTouch);
我还注意到,如果页面上有多个 iframe,其中一个将侦听器添加到其文档中,它也会破坏另一个 iframe 的输入字段。
小提琴在我的 Android 手机上运行正常。
任何想法为什么会发生这种情况?或者如何在不破坏 iOS 输入的情况下为触摸事件设置全局自定义事件处理程序?
【问题讨论】:
-
我们在使用 FastClick 时遇到了这个问题,它是 tracked publicly。我还根据您的测试用例向 Apple 提交了bug report。
-
嘿,是的,这绝对是一个 Safari iOS 错误,报告得很好。我仍然想知道这个问题怎么这么久都没有被注意到..
-
我在通过放大/缩小调整 iframe 窗口大小时也遇到了这个错误。
-
我相信这些问题的根源是相同的,即第一个触摸屏没有手势,当它们可用时,它们覆盖了现有界面,几乎不可能实现自定义手势。两种解决方案是使用手势事件,或者阻止它们并在需要时从头开始重新实现。
-
看起来很有趣。我现在正在寻找解决此问题的方法。
标签: javascript ios events input touch