[BUG记录] element-ui / element-plus 的 Select 可搜索组件在 iOS 下无法唤起软键盘

这篇具有很好参考价值的文章主要介绍了[BUG记录] element-ui / element-plus 的 Select 可搜索组件在 iOS 下无法唤起软键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

运行环境:vue@3.2.37, element-plus@2.2.9


问题描述

element-plus 的 Select 组件可以通过 filterable 属性开启搜索功能,该组件在iOS系统中,点击组件输入框,无法唤起软键盘。


原因分析:

此bug自 element-ui 就有了,是该组件内部输入框的 readonly 属性导致的问题。


解决方案:

1. element-ui

这个bug element-ui 和 element-plus 都有,可以参考这篇文章:ElementUI的Select组件在IOS唤不起软键盘解决 。
注意:此方案在 element-plus 下有bug,首次点击仍然概率无法唤起软键盘。

<el-select 
  v-model="value"
  placeholder="Select"
  ref="select"
  @hook:mounted="cancalReadOnly(false, 'select')"
  @visible-change="(value) => cancalReadOnly(value, 'select')"
>
  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
cancalReadOnly(value, refTxt) {
  this.$nextTick(() => {
    if(!value) {
      this.$refs[refTxt]?.$el?.querySelector('.el-input__inner')?.removeAttribute('readonly')
    }
  })
},

此方案,总结一下,就是在Select组件 mounted 以及 Select下拉框隐藏时,移除Select组件内部输入框的readonly属性。

分别避免首次、后续点击输入框时无法唤起软键盘。

2. element-plus

element-plus 下未能解决的原因在于vue3中去除了这个钩子 hook:mounted (参考:Vue官方文档里没告诉你的神秘钩子——@hook)。

hook:mounted 绑定了Select组件的mounted方法。

前面也总结过,vue3.x下此钩子的失效导致了无法避免首次点击产生的bug。那么,能否使用其它钩子,或者DOM原生事件取代它呢?

element-plus 解决方案

Select组件并不支持其它的DOM原生事件,但它提供了插槽。可以通过监听插槽内元素的加载,或者直接插入一个测试元素在Select组件内,间接监听Select组件是否加载完毕。

示例:
由于图片元素支持onload事件,在Select组件内添加一张图片。需添加样式隐藏该图片,图片内容无用,所以大小应尽量小。

<el-select 
  v-model="value"
  placeholder="Select"
  ref="select"
  @visible-change="(value) => cancalReadOnly(value, 'select')"
>
  <img style="display:none" @load="cancalReadOnly(false, 'select')" src="@/assets/images/ios-keyboard-bug.png" />
  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>

也可将图片放在Select插槽内,不过插槽有边距等样式问题


其它未验证方案

vue3.0 项目中 el-select ios 无法唤起软键盘解决
ElementUI的Select组件在IOS唤不起软键盘文章来源地址https://www.toymoban.com/news/detail-420126.html

到了这里,关于[BUG记录] element-ui / element-plus 的 Select 可搜索组件在 iOS 下无法唤起软键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用element-ui el-select 做下拉 全选+搜索 功能

    使用element-ui el-select 做下拉 全选+搜索 功能 有时候,需要用到下拉列表 全选和搜索,并且鼠标放入的时候有下拉列表展示。以前的做法是 check + el-input搜索结合做个组件,现在这个方法直接使用el-select 就能做到这个需求功能:有搜索+有全选+有取消+有确认请求+有鼠标移入自

    2024年02月11日
    浏览(57)
  • Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题

    前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式,纵横合并-CSDN博客 https://blog.csdn.net/m0_57904695/article/details/135537511?spm=1001.2014.3001.5501 目录 一、🛠️  newTable.vue 封装Table 二、🚩 newForm.vue 封装搜索表单  三、📝 TS类型 srctypesglobal.d.ts 四、♻️ 页面使用功能

    2024年01月24日
    浏览(60)
  • element-ui 切换分页条数,触发两次请求-bug记录, 分页组件封装

    前言介绍: 以组件完整功能为例需要配置的参数为current-page、page-sizes、page-size、total: current-page,文档所指为当前页数;显示当前数据所拥有页数 page-sizes,文档所指为每页显示个数选择器的选项设置;对当前页数据显示个数进行配置(以数组形式进行配置,例:[10, 20, 30,

    2024年02月08日
    浏览(48)
  • Element-UI实现的下拉搜索树组件(el-select、el-input、el-tree组合使用)

    1、子组件封装 注意使用:正常使用 // 子组件使用 父组件调用

    2024年02月11日
    浏览(84)
  • Vue3 element-plus el-select 无法选中,又不报错

    html 结构 js 代码 点击下拉选项,输入框无法选中 原因:ref=“conditionForm” 和 :model=“conditionForm” 冲突了, 4-1. 再Vue2里面 :model=“conditionForm” 绑定的是 conditionForm 变量, ref=“conditionForm” 绑定的是conditionForm字符串 v-model=“conditionForm.personnel” 绑定的 conditionForm 变量下属性

    2023年04月27日
    浏览(44)
  • element-plus的el-select实现触底加载更多(新版本报错踩坑)

    element-plus新版增加了一个属性,且默认为true,使得下拉菜单被插入到了body元素下。即.el-select下默认不包含.el-select-dropdown了。 当依旧按照之前的方式,封装自定义指令,实现滚动到el-select下拉菜单的底部,加载更多数据的功能时就会报错。 原逻辑:  报错 原因也就是前言中

    2024年02月08日
    浏览(55)
  • 修改el-select和el-input样式;修改element-plus的下拉框el-select样式

    修改el-select样式 input如下 el-input clearable v-model=\\\"name\\\" placeholder=\\\"请输入\\\" class=\\\"input-with-select input_box\\\" style=\\\"width: 148px;margin: 0 40px;position: absolute;right:67px;\\\" /

    2024年02月13日
    浏览(48)
  • 【element-ui】Bug集合

    在el-dialog与el-select配合使用的时候,我们会发现el-select无法下拉,其实这问题就是下拉框层级不够和样式问题,那如何解决呢?下面就是解决方式。 这个直接说结论,你的form.radio 必须为空字符,才能使require生效! 解决方法:  没有设置最大高度,则有底边框,设置了则没有

    2024年02月06日
    浏览(31)
  • element-ui select下拉框滚动加载更多

    当下拉框数据过多时,加载会非常慢,所以使用分页去显示,通过监听滚动事件来达到分页效果。 我是使用Vue自定义指令来做的。 一、首先在src下创建一个js文件,完成自定义指令的编写 有没有大神告诉我,自定义指令为啥在同一个页面不能使用多次? 二、在main.js中引入进来

    2024年02月16日
    浏览(48)
  • 在vue ui 中下载的element插件如何卸载并安装element-plus

    通过cmd打开vue ui并自定义创建项目中,引入了vue-cli-plugin-element插件,此时项目是vue cli3 的,与此版本有冲突,应该要下载vue-cli-plugin-element插件,如何卸载呢? 安装的错误版本插件:vue2安装element-ui版本,vue3需要安装element-plus版本 应该要装的element插件:  此时通过在终端

    2024年02月11日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包