手机端自动获取焦点,并且弹出键盘

需求:页面一进去就获取焦点,并且自动弹出软键盘。
实现:

setTimeout(function(){
     $(".demo").focus();
},500);

问题:在安卓上实现了获取焦点和自动弹出软键盘,但是在IOS无效。
解决方案:
在APP的配置文件config.xml,里面默认会有一句


大概的意思就是,键盘的显示需要用户去触发,而且是设置true的。
只要把true改成false就OK了。


我们用的是Wex5打包壳子,然后我是在Native工程下找到的config.xml文件,并且里面没有上面那句话,我自己往里加了一下重新生成ios。

问题原因:

网上说这是出于ios的安全机制,想要触发键盘,只能是用户手动的选择事件,才能弹出键盘。

原文:https://blog.csdn.net/qappleh/article/details/80283903
stackoverflow上搜到了相关的case:Mobile Safari Autofocus text field
来自FastClick团队的大牛指出了IOS下input的获取焦点存在这样的问题:

my colleagues and I found that iOS will only allow focus to be triggered on other elements, from within a function, if the first function in the call stack was triggered by a non-programmatic event. In your case, the call to setTimeout starts a new call stack, and the security mechanism kicks in to prevent you from setting focus on the input.

翻译:我和我的同事发现,iOS将只允许在其他元素上绑定函数来触发focus事件,如果第一个函数调用栈是由非编程触发的事件(这句不知道怎么翻译)。在你的案例中,调用setTimeout开始一个新的调用堆栈,IOS的安全机制开始阻止你触发input元素的focus事件。

github上也有相关的issue:iOS does not show keyboard on .focus()

里面也有人指出:

iOS won't, as far as I can tell from testing, show the keyboard without some kind of user interaction.Trying a setTimeout to load it doesnt work. But setting the focus on another element's onClick event brings it up.

翻译:据我目前测试所知,如果没有通过某种用户交互,iOS不会(触发focus事件)。用setTimeout试图触发focus不工作(setTimeout是延时触发,非用户交互的当下触发focus),但设置另一个元素的onClick事件,就能把focus事件带起来。

你可能感兴趣的:(手机端自动获取焦点,并且弹出键盘)