在iOS8之前,在输入元素上使用Javascript .focus()
方法看起来没有任何效果(虚拟键盘不会显示)。在最新的iOS 8版本之后,运行.focus()
方法似乎对页面加载没有任何影响,但是一旦用户触摸屏幕上的任何位置,虚拟键盘就会立即出现,并将页面滚动到焦点元素。(当我使用HTML属性“自动聚焦”时,这也是一个问题)
此更改已导致我的网站上的iOS8用户出现问题。当用户尝试单击我的页面上的按钮时,突然出现的滚动和键盘会导致他们无意中单击屏幕下方的按钮。
我假设这是iOS8中的一个错误,并不是故意的特性,我的问题是,解决这个问题的最有效的解决方案是什么?
每次使用.focus()
方法时,是否必须检查navigator.userAgent
以查看设备是否为iOS8?
发布于 2015-07-21 15:37:10
如果你正在开发一个Cordova项目,你可以添加下面的代码行来修复它
<preference name="KeyboardDisplayRequiresUserAction" value="false" />
添加到config.xml
文件中。在IOS 8.3和IOS 8.4中测试
发布于 2015-07-28 07:30:03
这里有一个针对jQuery.focus
的有条件的userAgent测试,所以你不需要在任何地方都添加monkeypatch。
JavaScript
if (/iPad|iPhone|iPod/g.test(navigator.userAgent)) {
(function($) {
return $.fn.focus = function() {
return arguments[0];
};
})(jQuery);
}
CoffeeScript
if /iPad|iPhone|iPod/g.test navigator.userAgent
(($) ->
$.fn.focus = ->
arguments[0]
)(jQuery)
注意:我返回arguments[0]
,这样我们就不会中断像$(el).focus().doSomethingElse()
这样的方法链接
发布于 2015-04-01 23:29:46
我已经在Apple bug Reporter中记录了一个关于这个问题的Bug,他们把它作为副本关闭了,这是他们正在努力修复这个问题的一个迹象。不幸的是,他们没有给我更多关于重复项目或问题本身的信息。我只能看到重复项状态,它是打开的。
https://stackoverflow.com/questions/26146252
复制相似问题