在JavaScript中显示移动电话上的虚拟键盘

46

我正在创建我的网站的移动端版本。网站的一部分会弹出一个带有文本输入框的对话框。通常情况下,我只需使用jQuery将焦点设置到文本输入框即可,但这不起作用。这是我的尝试:

$("#textinput").focus();
$("#textinput").click(); 
$("#textinput").trigger("tap"); //jQuery Mobile

它们似乎都不起作用。有什么建议吗?我一直在我的DroidX上测试它。我正在使用jQuery Mobile,但如果其他库有帮助,我也可以考虑。

3个回答

56

在iOS(iPhone)上至少是不行的,我相信在Android上也是一样的。这是一个可用性问题,除非用户输入,否则不应该允许触发键盘(如果自动触发,那只会很烦人)。

我知道有几种方法可以解决这个问题:

  • prompt()打开键盘
  • 如果你从一个.click()事件中触发.focus()(例如从打开你的对话框),键盘就会出现

2
啊,有道理。从他们的角度来看,理论上讲键盘只应在用户将焦点放在元素上时才弹出,这是出于可用性的考虑。然而,在屏幕上只有一个输入框的情况下,出于可用性的考虑,我希望自动将焦点放在该元素上,但键盘不会弹出。无论如何,感谢您的帮助。 - Adam
2
一个巨大的警告是它必须是一个“click”事件。尽管“tap”和“click”基本上是相同的,但它必须是一个“click”事件,否则它不会打开。 - dansch
我理解。但是,如果您从键盘事件调用focus()到另一个文本输入框,则屏幕键盘会消失! - Michael
2
你能详细说明一下 prompt() 方法吗?当你无法从 click 事件内部触发 focus 时,它能作为一种解决方法吗? - Petr Peller
4
@PetrPeller -- 他在指的是 window.prompt(),它会显示一个弹出对话框,提示访问者输入内容。它会同时显示键盘和弹出对话框,因此你不能简单地将其用于表单输入。链接 - Mihai MATEI
显示剩余2条评论

26

$("#textinput").focus();

通过将焦点设置在输入元素上来打开键盘,只有在“用户上下文”中设置焦点时才有效(例如点击,mousedown,mouseup)。
从“脚本上下文”(setTimeout,从ajax调用返回的回调)中,键盘不会显示出来。

-1

你可以使用:

$(textFiled).trigger("focus");

你可以将这段代码放在某个函数中,该函数将在打开某个覆盖层或文档准备就绪时触发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接