首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS8中使用.focus()将在触摸后显示虚拟键盘和滚动页面

在iOS8中使用.focus()将在触摸后显示虚拟键盘和滚动页面
EN

Stack Overflow用户
提问于 2014-10-02 00:38:41
回答 4查看 35.2K关注 0票数 48

在iOS8之前,在输入元素上使用Javascript .focus()方法看起来没有任何效果(虚拟键盘不会显示)。在最新的iOS 8版本之后,运行.focus()方法似乎对页面加载没有任何影响,但是一旦用户触摸屏幕上的任何位置,虚拟键盘就会立即出现,并将页面滚动到焦点元素。(当我使用HTML属性“自动聚焦”时,这也是一个问题)

此更改已导致我的网站上的iOS8用户出现问题。当用户尝试单击我的页面上的按钮时,突然出现的滚动和键盘会导致他们无意中单击屏幕下方的按钮。

我假设这是iOS8中的一个错误,并不是故意的特性,我的问题是,解决这个问题的最有效的解决方案是什么?

每次使用.focus()方法时,是否必须检查navigator.userAgent以查看设备是否为iOS8?

EN

回答 4

Stack Overflow用户

发布于 2015-07-21 15:37:10

如果你正在开发一个Cordova项目,你可以添加下面的代码行来修复它

代码语言:javascript
复制
<preference name="KeyboardDisplayRequiresUserAction" value="false" />

添加到config.xml文件中。在IOS 8.3和IOS 8.4中测试

票数 21
EN

Stack Overflow用户

发布于 2015-07-28 07:30:03

这里有一个针对jQuery.focus的有条件的userAgent测试,所以你不需要在任何地方都添加monkeypatch。

JavaScript

代码语言:javascript
复制
if (/iPad|iPhone|iPod/g.test(navigator.userAgent)) {
  (function($) {
    return $.fn.focus = function() {
      return arguments[0];
    };
  })(jQuery);
}

CoffeeScript

代码语言:javascript
复制
if /iPad|iPhone|iPod/g.test navigator.userAgent
  (($) ->
    $.fn.focus = ->
      arguments[0]
  )(jQuery)

注意:我返回arguments[0],这样我们就不会中断像$(el).focus().doSomethingElse()这样的方法链接

票数 1
EN

Stack Overflow用户

发布于 2015-04-01 23:29:46

我已经在Apple bug Reporter中记录了一个关于这个问题的Bug,他们把它作为副本关闭了,这是他们正在努力修复这个问题的一个迹象。不幸的是,他们没有给我更多关于重复项目或问题本身的信息。我只能看到重复项状态,它是打开的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26146252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档