如何在不显示屏幕键盘的情况下专注于文本输入

How can I focus on a text input without showing on-screen keyboard

我在做一个聊天服务,希望能很好的支持移动设备。

在下面的屏幕截图中,有一个输入字段。它允许输入文本,并且为了避免像 "if the text field is unfocused typing does nothing" 这样的问题,当点击它的外部时它会自动获得焦点 - 这确实改善了桌面计算机上的体验。但是,在带有软件键盘的设备上,这会导致屏幕键盘出现在移动设备上,这会让人分心。

考虑到点击任意位置会聚焦文本输入,是否可以通过某种方式使屏幕键盘仅在按下文本字段时出现?或者,以某种方式检测启用了软件键盘的设备并为它们禁用此功能。最好不要明确尝试检测移动设备、触摸屏或任何存在带有硬件键盘的触摸屏设备。

我能够在 Google Chrome 和 Android 上的 Opera Mobile 中重现这个问题,显然它发生在 iPhone 上,尽管我没有设备来测试它。

这是一个相当简单的问题示例。如果你触摸粉红色的矩形,它会导致触摸键盘出现,这是我不想要的。

<input type=text id=f>
<div style="background: pink; height: 200px; width: 200px" onclick="f.focus()">

简短的回答是,这是一个内置函数,您无法停止它,但有几个选项需要考虑。

1) 使用onFocus事件立即触发blur事件再次隐藏键盘

2) 在元素上设置只读="true",稍后将其移除并触发焦点事件。

3) 使用 div 和 css 创建一个假的输入元素,当你想在隐藏的输入字段上触发键盘焦点并复制输入的值时keyup 事件作为用户类型。

希望这些建议对您有所帮助。

如果我没猜错,您也可以考虑更改单击时聚焦文本字段的逻辑"anywhere"。在触摸设备上,触摸事件首先被调度,您可以取消点击处理(查找 preventDefault(),return false;或应该在触摸事件处理程序中调用的 stopPropagation())。

您将需要另一个事件侦听器来处理文本字段外的触摸事件,例如"touchstart".

如果您想保持聚焦文本字段的 ui 效果,只需通过脚本向文本字段添加 css class "focused" 而不是使用 textfield:focused{} 用于您的样式。