场景
前几天做一个移动端的功能,点击某个按钮后自动呼出一个弹层,弹层上有一个输入框,要求输入框自动获取焦点。
问题
于是使用下面的一溜逻辑:
1.点击按钮后显示弹层及输入框
2.ele.focus()
问题
ios上的问题
首先pc端模拟及adroid没啥问题。但是ios下无效。
原因在于ios有所限制:
寻常代码里的focus不会生效,除了在某个UI事件(例如click, touchend等)的直接执行环境中调用focus
注意这个直接环境,它的意思是如果你在setTimeout, promise等异步方式中执行了focus,依然是无效的。
和fastclick结合里产生的问题
原本在input的click,touchend中直接调用一个focus事件,经过fastclick的处理会变成:将原事件截取,抛弃,基于原事件创建一个新事件放在setTimeout中执行。
这样focus还是无法执行。
解决办法
禁止使用fastclick,使用touchend代替原来的click事件。
网友评论