从JavaScript手动触发iPhone/iPad/iPod键盘
我正在开发一个HTML代码编辑器,使用简单的DIV并捕获事件。当我在iPad上使用它时,键盘永远不会弹出,因为从技术上讲,我不在可编辑字段中从JavaScript手动触发iPhone/iPad/iPod键盘,javascript,iphone,html,ipad,keyboard,Javascript,Iphone,Html,Ipad,Keyboard,我正在开发一个HTML代码编辑器,使用简单的DIV并捕获事件。当我在iPad上使用它时,键盘永远不会弹出,因为从技术上讲,我不在可编辑字段中 有没有办法通过编程告诉iPad我需要一个键盘?这个问题的答案表明这是不可能的: 我的一位同事在做一个类似的项目,结果他在iPad版本的编辑器中使用了textarea,而在支持contenteditable的浏览器中使用了contenteditable divs/span。也许类似的方法也适用于您。我发现,调用提示符(“输入一些值”)确实会触发我的iPad2
有没有办法通过编程告诉iPad我需要一个键盘?这个问题的答案表明这是不可能的:
我的一位同事在做一个类似的项目,结果他在iPad版本的编辑器中使用了textarea,而在支持contenteditable的浏览器中使用了contenteditable divs/span。也许类似的方法也适用于您。我发现,调用
提示符(“输入一些值”)
确实会触发我的iPad2上的键盘。不确定这在您的情况下是否有用。如果您的代码是通过用户操作启动的某个东西执行的,那么它将工作
例如,
这可以工作(pops键盘):
点击
这不起作用(输入有边框,但没有键盘弹出):
window.onload=函数(){
$(“foo”).focus();
}
这里有一个解决方案:
<input id="my-input" type="text" />
<script type="text/javascript">
var textbox = document.getElementById('my-input');
textbox.select();
</script>
var textbox=document.getElementById('my-input');
textbox.select();
在contentEditable div上放置一个透明的文本区域。一旦用户聚焦文本区域,键盘就会打开
为焦点
事件在文本区域注册事件侦听器
,并将文本区域的可见性
设置为隐藏
。这可以防止光标闪烁
在模糊
事件发生后,将文本区域的可见性
设置回可见
为
keydown
、keydup
、keypress
事件注册其他事件侦听器,并以与在contentEditable div中处理事件相同的方式处理这些事件。要使键盘在iOS设备上显示,您需要关注可编辑元素,如输入
或文本区域
。此外,元素必须可见,并且必须执行.focus()
功能以响应用户交互(如鼠标单击)
问题是-我们不希望输入元素可见。。
我已经安静地摆弄了一段时间,最终得到了我想要的结果
首先,创建一个用于显示键盘的元素——在本例中是一个按钮和一个隐藏的输入元素:(或)
注:
不透明度
、高度
和宽度
设置为0
。但是,如果您的输入被完全隐藏,这将无法再次工作,因此请确保您保留填充
或边框
,以便能够渲染某些内容(即使由于不透明度,它不会显示)。这也意味着您不应该使用display:none
来隐藏它,隐藏的元素只是不允许被聚焦keydown
、keypress
、keypup
)来访问用户的交互,就像您通常所做的那样。这里没什么特别的.focus()
。键盘将打开.focus()
。如果需要,可以使用较小的设置超时延迟,例如500ms我认为内容编辑是一个完全不同的野兽。这需要在浏览器级别实现。我只是想让键盘显示出来,并将按键事件发送到文档中,我的编辑器会处理其余的事情。难道不能使用JS来检测用户是否来自iPad,然后用文本区域替换可编辑的DIV吗?这不是问题的答案。OP希望知道如何告诉iOS使用javascript打开键盘。select()函数显示键盘。select()函数不显示键盘!你知道如何通过编程测试我的代码是否被认为是“通过用户操作启动的”吗?
<input type='text' id='foo'>
<script>
window.onload = function() {
$("#foo").focus();
}
</script>
<input id="my-input" type="text" />
<script type="text/javascript">
var textbox = document.getElementById('my-input');
textbox.select();
</script>
<button id="openKeyboard">Open Keyboard</button>
<input id="hiddenInput" style="visibility: hidden;">
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
});