我正在使用简单的 DIV 和捕获事件开发 HTML 代码编辑器。当我在 iPad 上使用它时,键盘永远不会弹出,因为我在技术上不在可编辑字段中。
有没有办法以编程方式告诉 iPad 我需要一个键盘?
我正在使用简单的 DIV 和捕获事件开发 HTML 代码编辑器。当我在 iPad 上使用它时,键盘永远不会弹出,因为我在技术上不在可编辑字段中。
有没有办法以编程方式告诉 iPad 我需要一个键盘?
如果您的代码是通过用户操作启动的某些内容来执行的,那么它将起作用。
例如;
这有效(弹出键盘):
<input type='text' id='foo'><div onclick='$("#foo").focus();'>click</div>
这不起作用(输入有边框但没有键盘弹出):
<input type='text' id='foo'>
<script>
window.onload = function() {
$("#foo").focus();
}
</script>
在 contentEditable div 上放置一个透明的 textarea。只要用户聚焦文本区域,键盘就会打开。
event listener
在focus
事件的 textarea 上注册,并将 textarea 的设置visibility
为hidden
。这可以防止闪烁的光标。
设置visibility
textarea的背到visible
了之后blur
发生的事件。
为keydown
、keyup
、keypress
事件注册额外的事件侦听器并以与在 contentEditable div 中处理它们相同的方式处理这些事件。
要在 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
});
笔记:
opacity
、height
和设置width
为0
。但是,如果您的输入完全隐藏,这将不再起作用,因此请确保您离开padding
或border
只是为了有一些东西要渲染(即使由于不透明度而不会显示)。这也意味着你不应该使用display:none
隐藏它,隐藏的元素不允许被聚焦。keydown
, keypress
, keyup
) 像往常一样访问用户的交互。这里没什么特别的。我发现呼叫prompt("Enter some value")
确实会触发 iPad 2 上的键盘。不确定这对您的情况是否有帮助。
这个问题的答案表明这是不可能的:为什么@contenteditable 在 iPhone 上不起作用?
我的一位从事类似项目的同事最终在他的编辑器的 iPad 版本中使用了 textarea,在支持 contenteditable 的浏览器中使用了 contenteditable div/span。也许类似的东西对你有用。