问题主要是在IOS端,安卓可以正常拉起手机的输入法,
在IOS端会出现下图的情况,组件已经获取了焦点,下拉框也出现了,但是输入法没有出现。
input有readonly属性,也不会弹出软键盘
看了一下el-select源码,实际上它内部是用一个计算属性去控制readonly属性,在下拉框展开的时候才会取消readonly,我猜也许是取消的速度比较慢,IOS在点击的时候还是检测到readonly的存在,因此键盘无法呼出。
<template> <el-select ref="select" @hook:mounted="cancalReadOnly" @visible-change="cancalReadOnly" > </el-select> </template> <script> export default { methods: { cancalReadOnly(onOff) { this.$nextTick(() => { if (!onOff) { const {select} = this.$refs; const input = select.$el.querySelector('.el-input__inner'); input.removeAttribute('readonly'); } }); } } } </script>
粗暴的解决方案就是监听组件的事件,在组件mounted初始化和下拉框关闭的时候把readonly强制干掉