問題主要是在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強制干掉