解决 element-plus el-input组件在iOS移动端的兼容问题,点击2次才能弹出键盘

解决 element-plus el-input组件在iOS移动端的兼容问题,点击2次才能弹出键盘

1. 现象:

在iPhone手机浏览器(Safari、Chrome、Firefox)上测试发现,带有 clearable 属性的 el-input,需要点击两次才会弹出软键盘,通过真机调试,发现和PC上存在以下差异:

上图是iPhone连接电脑,与Safari连调的截图,操作为点击两次表单输入框

el-input__suffix:显示 clearable 的 叉号 图标
is-focus: input 输入框边框变色,表示获取焦点,可编辑

解决思路

在移动端监听点击操作,获取input元素,自动执行一次点击方法,从而实现与PC相同的正常效果

import { DirectiveBinding } from 'vue'

const vMfocus = {
	mounted: (el: HTMLElement, binding: DirectiveBinding) => {
		if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
			el.addEventListener('touchend', event => {
				if (event.target instanceof HTMLInputElement) {
					event.target.focus()
				}
			})
		}
	}
}

<el-form-item prop="name" label="Name">
	<el-input v-model="form.name" placeholder="Name" v-mfocus clearable />
</el-form-item>

实测在iPhone手机的Safari、Chrome、Firefox浏览器上,点击表单输入框,均可直接触发编辑和弹出键盘。

备注:如果有很多表单页面,建议自定义指令全局注册

文中如有错误或不当之处,还请指出,不胜感激。

### Vue3 中使用 Element Plus 的 `el-input` 组件 #### 安装和引入 Element Plus 为了在项目中使用 Element Plus,首先需要安装该库: ```bash npm install element-plus ``` 接着,在项目的入口文件(通常是 main.ts 或者 main.js)中全局注册 Element Plus 和样式文件。 ```javascript import { createApp } from 'vue'; import App from './App.vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); ``` #### 基本用法 下面是一个简单的例子展示如何在一个页面上使用 `el-input` 输入框组件。此示例展示了基本输入框以及带图标按钮的组合形式[^2]。 ```html <template> <div class="example"> <!-- 单行文本 --> <el-input v-model="text" placeholder="请输入内容"></el-input> <!-- 多行文本域 --> <el-input type="textarea" :rows="4" v-model="textarea" placeholder="请输入内容"></el-input> <!-- 带前置/后置标签 --> <el-input placeholder="请选择日期" suffix-icon="el-icon-date"></el-input> <!-- 自定义前缀或后缀图标的插槽 --> <el-input placeholder="请输入内容"> <template #prefix><i class="el-icon-search"></i></template> </el-input> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; let text = ref(''); let textarea = ref(''); </script> ``` 对于更复杂的场景,比如当遇到像对话框内的 input 获取不到焦点的问题时,可以尝试通过 `$nextTick()` 方法来延迟执行获取焦点的操作,确保 DOM 已经更新完毕后再操作DOM元素[^1]。 #### 解决弹窗内 Input 不聚焦问题的方法 如果发现 `el-dialog` 打开后里面的 `el-input` 没有自动获得焦点,则可以在打开对话框之后立即调用一 `$nextTick()` 来等待视图渲染完成;然后再嵌套一层 `$nextTick()` 调用来真正设置焦点给目标 input 元素。 ```typescript this.dialogVisible = true; this.$nextTick(() => { this.$nextTick(() => { (this.$refs.input as HTMLInputElement).focus(); }); }); ``` 需要注意的是这里的 `ref="input"` 是指定了要访问的具体 input 控件的名字属性值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值