我在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将监听器添加到其文档中,它也会破坏其他iframe的输入字段。
小提琴在我的Android手机上表现正常。
任何想法为什么会发生这种情况?或者如何为触摸事件提供全局自定义事件处理程序,而不会破坏iOS上的输入?
答案 0 :(得分:14)
这是一个解决方法。将焦点设置到窗口,然后在超时时间内返回节点:
function fixIpadTouch(node){
node.ontouchend=function(e){
if(document.activeElement===node){
window.focus();
setTimeout(function(){
node.focus();
},0);
}
}
}
答案 1 :(得分:2)
在我的案例中,Terry的一个变体解决了这个Mobile Safari错误(!!!)。在这里,'#input'和此代码位于iframe页面上:
var el = $('#input');
el.on('keydown', function() {
window.focus()
el.focus()
});
该错误以多种方式触发,但'keydown'可靠地通过。这使得下一个'按键'也可以到达。
答案 2 :(得分:0)
jQuery Mobile 1.2.0应该是您所需要的
PROVE!在打勾之前:
勾选方框后: