el-select filterable模糊搜索在iOS手机上无法弹出软键盘,解决方案

前提:

el-select filterable模糊搜索在iOS手机上无法弹出软键盘,在手机上使用时,iOS手机,该组件无法唤起软键盘,导致没法进行模糊搜素。

于是。开始去找原因,发现主要是因为 组件中,input 上有一个readonly 属性,而该属性规定输入字段为只读。阻止了用户对值进行修改,直到满足某些条件才行。

其在微信开发者工具上是可以模糊搜索,在手机上没法弹出软键盘搜素。

ios手机 h5没法搜素

想达到预期效果,效果图

**想达到预期效果:**可以进行模糊搜素

解决方法

javascript 复制代码
main.js中
import ElementUi from 'element-ui';

ElementUi.Select.computed.readonly = function () {
const isIE = !this.$isServer && !Number.isNaN(Number(document.documentMode));
return !(this.filterable || this.multiple || !isIE) && !this.visible;
};

Vue.use(ElementUI)

页面中

html 复制代码
      <div class="from-wrap">
                    <div class="from-title">车牌号</div>
                    <div class="from-box">
                        <el-select v-model="dataForm.vehicle_number" clearable filterable placeholder="请选择" style="width: 100%;"
                        ref="selectCar"
                        @focus="clearCar"
                        @hook:mounted="clearCar"
                        @visible-change="clearCar" 
                        :clearable="showCloseCar"
                        @change="changeCar">
                            <el-option
                              v-for="(item,index) in carLists"
                              :key="index"
                              :label="item.name"
                              :value="item.vehicle_number">
                            </el-option>
                        </el-select>
                    </div>
                </div>

clearable 清空问题

javascript 复制代码
// 增加一个 showClose,用来控制 clearable 显示隐藏。

<template>
    <el-select
        ref="select"
        @focus="clear"
        :clearable="showClose"
        @hook:mounted="clear"
        @visible-change="clear"
        @blur.native.capture="onblur"
    >
    </el-select>
</template>
<script>
    export default {
    	data(){
    		return{
    			showfalse:false,
    		}
    	},
        methods: {
            clear(async) {
            	if (async) { // 打开下拉框 显示可清空按钮
					this.showClose = true
				}
				this.$nextTick(() => {
			        if (!async) {
			          // ios 手机有延迟问题
			          setTimeout(() => {
			            const { select } = this.$refs
			            const input = select.$el.querySelector('.el-input__inner')
			            input.removeAttribute('readonly')
			          }, 200)
			        }
			     })
                
            },
            // 失去焦点时,需要把软键盘收起
			onblur() {
				setTimeout(() => {
					if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //判断iPhone|iPad|iPod|iOS
						this.$refs.select.blur();
					}
					this.showClose = false
			}
        }
    }
</script>

完整代码

javascript 复制代码
data: {
    showCloseCar: false,
},
    methods: {
//clearable 清空问题
//如果el-select 还增加了clearable清空功能,会发现当你点击选中时,首先会出现清空按钮,二次点击才能弹出软键盘。
//增加一个 showClose,用来控制 clearable 显示隐藏。
       clearCar(async) {
         if (async) { // 打开下拉框 显示可清空按钮
            this.showCloseCar = true
         }
         this.$nextTick(() => {
            if (!async) {
               // ios 手机有延迟问题
               setTimeout(() => {
                   const { selectCar } = this.$refs
                   const input = selectCar.$el.querySelector('.el-input__inner')
                   input.removeAttribute('readonly')
                    }, 200)
               }
          })
       },
        // 失去焦点时,需要把软键盘收起
       onblurCar() {
           setTimeout(() => {
              if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { //判断iPhone|iPad|iPod|iOS
                this.$refs.selectCar.blur();
               }
                        this.showCloseCar = false
            },100)
       },
       clearDriver(async) {
           if (async) { // 打开下拉框 显示可清空按钮
                this.showCloseDriver = true
           }
          this.$nextTick(() => {
                if (!async) {
                 // ios 手机有延迟问题
                setTimeout(() => {
                const { selectDriver } = this.$refs
                const input = selectDriver.$el.querySelector('.el-input__inner')
                     input.removeAttribute('readonly')
                }, 200)
         }
        })
     },
     changeCar(val) {
        console.log(val,'changeCar')
        this.$forceUpdate();
    },
}
二次点击问题

el-select 下拉选项在ios上,需要点击2次才能选中(通过css解决,需确保css样式全局作用域)

css 复制代码
// App.vue
<style lang="scss">
 // to fix 在ios设备中,el-select组件下拉框,点击2次才能选中问题。
 .el-scrollbar .el-scrollbar__bar {
    opacity: 1 !important;
 }
</style

效果图:

完结,撒花~

🍓结束语🏆

🍉还有一些不如的地方大家可以指正,欢迎评论留言。

相关推荐
AirDroid_cn8 小时前
iQOO手机怎样相互远程控制?其他手机可以远程控制iQOO吗?
android·智能手机·iphone·远程控制·远程控制手机·手机远程控制手机
limingade1 天前
手机通话语音离线ASR识别商用和优化方向
智能手机·语音识别·funasr离线识别·android做asr·手机断网离线asr·asr语音转文字识别
AirDroid_cn1 天前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
AIminminHu1 天前
数字图像处理(番外篇:软件设计思想和屏幕原理的藕断丝连):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
智能手机
PHOSKEY1 天前
闪测仪应用案例丨手机中框如何突破「尺寸检测」瓶颈?
运维·智能手机·自动化
limingade2 天前
手机无网离线使用FunASR识别SIM卡语音通话内容
智能手机·funasr·funasr无网识别通话语音·手机asr识别sim卡通话·手机asr识别通话声音
Rverdoser2 天前
手机内存融合是什么意思
智能手机
前端若水2 天前
通过 Windows 共享文件夹 + 手机访问(SMB协议)如何实现
windows·智能手机
开开心心就好3 天前
免费PDF处理软件,支持多种操作
运维·服务器·前端·spring boot·智能手机·pdf·电脑
哲科软件3 天前
从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
大数据·智能手机·重构