javascript - 移动版 Safari : Javascript focus() method on inputfield only works with click?

标签 javascript jquery iphone input focus

我有一个像这样的简单输入框。

<div class="search">
   <input type="text" value="y u no work"/>
</div>​

我正在尝试在一个函数中 focus() 它。 所以在随机函数内部(不管它是什么函数)我有这一行......

$('.search').find('input').focus();

这在任何桌面上都能正常工作。

但是它在我的 iPhone 上不起作用。该字段未获得焦点,我的 iPhone 上未显示键盘。

出于测试目的并向大家展示问题,我做了一个快速示例:

$('#some-test-element').click(function() {
  $('.search').find('input').focus(); // works well on my iPhone - Keyboard slides in
});

setTimeout(function() {
  //alert('test'); //works
  $('.search').find('input').focus(); // doesn't work on my iPhone - works on Desktop
}, 5000);​

知道为什么 focus() 不能在我的 iPhone 上使用超时功能。

要查看实时示例,请在您的 iPhone 上测试此 fiddle 。 http://jsfiddle.net/Hc4sT/

更新:

我创建的案例与我目前在当前项目中面临的案例完全相同。

我有一个选择框,当“更改”时,它应该将焦点设置到输入字段并滑入 iphone 或其他移动设备上的 kexboard。我发现 focus() 设置正确但键盘没有显示。我需要键盘才能显示。

最佳答案

其实,伙计们,有办法的。我费了好大劲才想出 [链接已删除](在 iPhone 或 iPad 上试试)。

基本上,触摸屏设备上的 Safari 在 focus()ing 文本框方面很吝啬。如果您执行 click().focus(),甚至某些桌面浏览器也会做得更好。但是触摸屏设备上的 Safari 的设计者意识到当键盘不断出现时用户会很烦,所以他们只在以下情况下才会出现焦点:

1) 用户点击某处,在执行点击事件时调用了focus()。如果您正在进行 AJAX 调用,那么您必须同步进行,例如使用已弃用(但仍然可用)的 $.ajax({async:false}) 选项在 jQuery 中。

2) 此外——这个让我忙了一会儿——如果其他文本框当时处于焦点状态,focus() 似乎仍然不起作用。我有一个执行 AJAX 的“Go”按钮,所以我尝试在 Go 按钮的 touchstart 事件上模糊文本框,但这只会让键盘消失并在我有机会之前移动视口(viewport)完成点击 Go 按钮。最后,我尝试在 Go 按钮的 touchend 事件上模糊文本框,这非常有效!

当您将#1 和#2 放在一起时,您会得到一个神奇的结果,它将您的登录表单与所有蹩脚的 Web 登录表单区分开来,通过将焦点放在您的密码字段中,并使它们感觉更原生。享受! :)

关于javascript - 移动版 Safari : Javascript focus() method on inputfield only works with click?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204571/

相关文章:

javascript - OKFN Bubble Tree中的数据输入

javascript - 提交后如何保留下拉列表的值

c# - 如何从azure blob存储下载文件

iphone - Objective-C iPhone。获取表中的 NSMutableArray

iphone - UIWebView 链接在 Safari 中打开

javascript - 使用 XTK 的 X.volume() 显示 .dcm 文件

javascript - 下拉选择上的远程模式

javascript - 如何在 sequelize findAll 方法中使用 left Join

javascript - Chart.js - 将折线图格式数据转换为 Lacs/Crores

ios - 在 x 轴上随机生成 Sprite