从 JavaScript 手动触发 iPhone/iPad/iPod 键盘

IT技术 javascript iphone html ipad keyboard
2021-03-02 10:44:09

我正在使用简单的 DIV 和捕获事件开发 HTML 代码编辑器。当我在 iPad 上使用它时,键盘永远不会弹出,因为我在技术上不在可编辑字段中。

有没有办法以编程方式告诉 iPad 我需要一个键盘?

6个回答

如果您的代码是通过用户操作启动的某些内容来执行的,那么它将起作用。

例如;

这有效(弹出键盘):

<input type='text' id='foo'><div onclick='$("#foo").focus();'>click</div>

这不起作用(输入有边框但没有键盘弹出):

<input type='text' id='foo'>
<script>
  window.onload = function() {
    $("#foo").focus();
  }
</script>
知道如何以编程方式测试我的代码是否被视为“通过用户操作启动”?
2021-05-10 10:44:09

在 contentEditable div 上放置一个透明的 textarea。只要用户聚焦文本区域,键盘就会打开。

event listenerfocus事件的 textarea 上注册,并将 textarea 的设置visibilityhidden这可以防止闪烁的光标。

设置visibilitytextarea的背到visible了之后blur发生的事件。

keydownkeyupkeypress事件注册额外的事件侦听器并以与在 contentEditable div 中处理它们相同的方式处理这些事件。

这不是问题的答案。OP 希望知道如何告诉 iOS 使用 javascript 打开键盘。
2021-05-09 10:44:09

要在 iOS 设备上显示键盘,您需要关注可编辑元素,例如 aninput或 a textarea此外,该元素必须是可见的,并且.focus()必须响应用户交互(例如鼠标单击)来执行功能。

问题是 - 我们不希望输入元素可见......我已经安静地摆弄了一段时间,最终得到了我正在寻找的结果。

首先,创建一个要用于显示键盘的元素 - 在本例中是一个按钮和一个隐藏的输入元素:(在移动设备上运行jsFiddle测试

<button id="openKeyboard">Open Keyboard</button>
<input id="hiddenInput" style="visibility: hidden;">

然后使用以下javascript:

document.getElementById('openKeyboard').addEventListener('click', function(){
    var inputElement = document.getElementById('hiddenInput');
    inputElement.style.visibility = 'visible'; // unhide the input
    inputElement.focus(); // focus on it so keyboard pops
    inputElement.style.visibility = 'hidden'; // hide it again
});

笔记:

  1. 我注意到 iOS safari 会自动滚动并缩放到输入区域,因此请确保使用正确的视口并将输入元素放置在相关位置。
  2. 您可以在输入中使用一些 CSS,例如将opacityheight设置width0但是,如果您的输入完全隐藏,这将不再起作用,因此请确保您离开paddingborder只是为了有一些东西要渲染(即使由于不透明度而不会显示)。这也意味着你不应该使用display:none隐藏它,隐藏的元素不允许被聚焦。
  3. 使用隐藏输入上的常规键盘事件 ( keydown, keypress, keyup) 像往常一样访问用户的交互。这里没什么特别的。

我发现呼叫prompt("Enter some value")确实会触发 iPad 2 上的键盘。不确定这对您的情况是否有帮助。

这个问题的答案表明这是不可能的:为什么@contenteditable 在 iPhone 上不起作用?

我的一位从事类似项目的同事最终在他的编辑器的 iPad 版本中使用了 textarea,在支持 contenteditable 的浏览器中使用了 contenteditable div/span。也许类似的东西对你有用。

我认为 Content Editable 是完全不同的野兽。这是需要在浏览器级别实现的东西。我只是想让键盘出现并将按键事件发送到文档,我的编辑器将负责其余的工作。
2021-05-19 10:44:09