- 现象:ios点击输入框之后没反应,需要多次点击或者长按一会儿才能唤起软键盘,经过查阅,发现应该是fastclick.js 引起的冲突,ios11 后修复了移动点击300ms延迟,所以ios 11 及以上版本会有这个问题
- 解决方法
1、在node_module里找到fastClick.js文件,然后找到focus方法
在focus 方法里的 if 语句中添加一下代码
targetElement.focus();
完整代码:
if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
length = targetElement.value.length;
targetElement.focus()
targetElement.setSelectionRange(length, length);
} else {
targetElement.focus();
}
2、在main.js中添加(这项根据具体情况添加/比如项目中有阻止系统键盘调用客户端安全键盘的逻辑最好不要加)
// 解决 input、textarea 获取焦点不灵敏的问题
// 原因:fastclick.js 引起的冲突,ios11 后修复了移动点击300ms延迟
const str= navigator.userAgent.toLowerCase()
const ver=str.match(/cpu iphone os (.*?) like mac os/)
if(ver && parseInt(ver[1]) > 10){//IOS系统
// 引入fastclick 做相关处理
if (typeof FastClick.prototype.focus === 'function') {
var oldFocusFn = FastClick.prototype.focus
FastClick.prototype.focus = function(targetElement) {
oldFocusFn()
if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
targetElement.focus()
}
};
} else {
FastClick.prototype.focus = function(targetElement) {
if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
length = targetElement.value.length;
targetElement.setSelectionRange(length, length);
targetElement.focus()
} else {
targetElement.focus();
}
}
}
}
引用:https://codeleading.com/article/78482239378/