单击两次后无法在iOS上键入html输入字段

BFi*_*Fil 13 javascript events input touch ios

我在iOS上遇到了一个问题,我为它做了一个小提琴:

http://jsfiddle.net/Hk56Q/

如果事件监听器被添加到文档中以用于任何触摸事件(touchstart/touchmove/touchend),如下所示:

function onTouch( e ){};
document.addEventListener( 'touchstart', onTouch, false );
Run Code Online (Sandbox Code Playgroud)

这导致输入字段在iOS上具有以下行为:

  • 第一次触摸:输入获得焦点,用户可以正确输入
  • 随后的触摸(专注于现场已经存在):打字不再起作用

我在iPad和iPhone(模拟器和实际设备)上在iOS 5,5.1和6上遇到并测试了这个问题.

唯一的修复似乎是删除事件监听器以恢复输入字段的正确行为(或实际上从不添加监听器):

document.removeEventListener( 'touchstart', onTouch);
Run Code Online (Sandbox Code Playgroud)

我还注意到,如果页面上有多个iframe,并且其中一个iframe将监听器添加到其文档中,它也会破坏其他iframe的输入字段.

小提琴在我的Android手机上表现正常.

任何想法为什么会发生这种情况?或者如何为触摸事件提供全局自定义事件处理程序,而不会破坏iOS上的输入?

小智 16

这是一个解决方法.将焦点设置到窗口,然后在超时时返回节点:

function fixIpadTouch(node){
    node.ontouchend=function(e){
        if(document.activeElement===node){
            window.focus();
            setTimeout(function(){
                node.focus();
            },0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Neo*_*Jun 0

jQuery Mobile 1.2.0 应该是您所需要的

证明!在勾选该框之前:

证明(之前)

勾选该框后:

打勾后