记录一次解决uniapp自定义验证框的bug过程

这篇具有很好参考价值的文章主要介绍了记录一次解决uniapp自定义验证框的bug过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题起源:
本来是使用自定义软盘,但是因为无法实现粘贴验证码的问题,最终打算采用原生自带的软盘来处理

问题路程:
1、点击验证码框时候可以实现隐藏和切换是否聚焦状态,但是没有考虑到点击验证码以外位置时候,也会触发取消聚焦,而且刚好没有输入框绑定了取消聚焦的事件,所以软盘隐藏了,而且isFocus还是true,再次点击验证码输入框时候,需要点击两次才能再次唤起软盘
2、在1的基础上改进了:在输入框上添加了@blur 事件,当取消聚焦时候设置isFocus为false,但是又出现这样一个问题,在点击验证码输入框时候,首次可以进行弹起,但是如果二次点击验证码输入框会出现弹起后无法进行关闭,这是因为input的@blur刚好设置为false,然后立马又被绑定在验证码输入框上的事件修改为true了,所以再次弹起
3、在2的基础上做修改:将input上的@blur移除,实现,点击验证码输入框时候能正常显示隐藏,但是点击除了验证码输入框以外的事件时候将isFocus设置为false,表示已经取消聚焦。但是这里要注意验证码输入框上事件可能会传播到最外层的事件也就是会触发到验证码输入框以外的事件
4、虽然3看似已经没有问题了,但是发现又存在一个问题:点击键盘的完成事件时候,触发输入框的取消聚焦事件 软盘被收回了,但是isFocus还是true,这个时候再次点击验证码输入框时候,需要点击两次
5、针对4的问题,打算通过监听软盘的显示与隐藏来设置isFocus ,如果高度变为0表示取消聚焦了,则将isFocus设置为false,,同时移除在3当中验证码输入框以外的监听事件,而且将@blur移除,这个时候就是只剩下验证码输入框点击修改isFocus 以及 监听键盘事件了。
6、这个时候,正常来说,应该不会有啥问题了,不过当我快速点击验证码输入框位置进行显示与隐藏时候,发现有时候,点击两次软盘都是隐藏又立马弹起,无法进行隐藏,这个问题不知道问题所在,所以我打算,在点击验证码输入框时候,保持软盘处于弹起状态,点击其他位置时候才进行隐藏。本来以为点击验证码输入框时候,保持isFocus为true就不会导致软盘隐藏的,但是实际上问题并没有这么好解决,最终找来代码,是直接阻止触摸屏幕的事件,也就是点击验证码输入框时候,阻止屏幕事件的默认行为,保持isFocus为true,这样子也不会导致input取消聚焦,点击前天位置时候,还是正常触发触摸事件默认行为,取消聚焦设置isFocus为false。

另外还有一个问题就是,input在ios上面,如果填充了内容,再次聚焦输入框时候,无法让光标展示在最后面,查看了相关文档看到了这么一个属性

:selection-start="datas.validateCode.length+1" 
:selection-end="datas.validateCode.length+1"

只需要加上这个代码就可以了,但是这个东西有局限性,就是只有首次聚焦时候才会生效
为了解决这个问题,实现每次isFocus为true聚焦时候都能实现光标在结尾处,所以我也设置input根据isFocus来决定显示与隐藏,相当于重新创建又生成input,这样子感觉每次都是首次聚焦了。

最终关键代码如下:
验证码输入框

<view class="d-flex  a-center j-sb " @touchend.prevent="focus" style="padding: 0 90rpx;">
					<view :class="[!code[0] && !code[1] && !code[2] && !code[3] ? 'border-active' : 'border-muted']"
						class="smsInput mborder  rounded d-flex j-center a-center" style="font-size: 74rpx;">
						{{ code[0] }}
					</view>
					<view :class="[!code[1] && code[0] && !code[2] && !code[3] ? 'border-active' : 'border-muted']"
						class="smsInput mborder  rounded d-flex j-center a-center" style="font-size: 74rpx;">
						{{ code[1] }}
					</view>
					<view :class="[!code[2] && code[0] && code[1] && !code[3] ? 'border-active' : 'border-muted']"
						class="smsInput mborder  rounded d-flex j-center a-center" style="font-size: 74rpx;">
						{{ code[2] }}
					</view>
					<view :class="[!code[3] && code[0] && code[1] && code[2] ? 'border-active' : 'border-muted']"
						class="smsInput mborder  rounded d-flex j-center a-center" style="font-size: 74rpx;">
						{{ code[3] }}
					</view>
				</view>

真实的input输入框

<input :selection-start="datas.validateCode.length+1" :selection-end="datas.validateCode.length+1"
					v-if="isFocus" style="position: fixed;left: -100px;" type="text" ref="inputRef" maxlength="4"
					@input="inputFilter" :focus="isFocus" :type="$isIos?'number':'tel'" v-model="datas.validateCode">

绑定键盘高度监听

uni.onKeyboardHeightChange(res => {

				if (res.height == 0) {
					this.isFocus = false;
				}
			})

聚焦事件文章来源地址https://www.toymoban.com/news/detail-556001.html

/**
			 * 输入框聚焦
			 */
			focus(type) {
				if (!this.isFocus) {
					this.isFocus = true;
				}
			},

到了这里,关于记录一次解决uniapp自定义验证框的bug过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 记录一次es7.8.1报错解决过程 unknown key [column] for create index

    记录一次es的\\\"不清楚\\\"报错 场景:本地安装es版本7.8.1,安装kibana7.8.1,首先启动es,接着启动kibana,创建一个索引,创建语句如下: 准备插入一条数据: 一直百度插入语句的问题,创建索引的问题,都没有找到真正的原因,这个时候看到es的后台打印日志如下: 报错如下:[C

    2024年02月11日
    浏览(46)
  • 记录一次使用__dirname和./引出的bug

    JS项目中         保存本地生成的图片时使用的路径: __dirname+“/waitToFinishTask.png\\\" 。         但是在获取这张图片的时候我使用的是“ ./waitToFinishTask.png ”。         从而抛出异常: Error: ENOENT, No such file or directory \\\'./waitToFinishTask.png\\\'.      (有一个奇怪的地方就是,使用

    2024年02月09日
    浏览(39)
  • 记录一次数据中包含转义字符\引发的bug

    后端返回给前端的数据是: {   \\\"bizObj\\\": {     \\\"current\\\": 1,     \\\"orders\\\": [            ],     \\\"pages\\\": 2,     \\\"records\\\": [       {         \\\"from\\\": \\\"1d85b8a4bd33aaf99adc2e71ef02960e\\\",         \\\"fromName\\\": \\\"ddd\\\",         \\\"id\\\": \\\"742836e8f3d00a6e2ebd568f3a2dd75e\\\",         \\\"img\\\": \\\"/net-hospital-admin/images/boy.png\\\",    

    2024年01月23日
    浏览(56)
  • 【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

    最近在vue3使用swiper时,突然发现loop属性和slides-per-view属性同时存在启用时,loop生效,下一步只能生效一次的bug,上一步却是好的。非常滴奇怪。 分析属性是否使用错误。 loop是循环模式,布尔型。 slides-per-view是同屏显示多少数量,数值型或’auto’。 更改的样式是否是诱因

    2024年02月14日
    浏览(58)
  • 记录一次Linux下ChatGLM部署过程

    本地化的GPT就是香,就是有点费钱。 项目地址:https://github.com/THUDM/ChatGLM-6B 由于本地电脑显卡都不行,所以我租了AutoDL的一台算力服务器。 Tesla T4 16G 显存,56GB内存,符合我们跑ChatGLM的配置。 其实本来这台服务器是其他用途,跑vits的,所以选择了so-vits-svc4的 镜像 ,这类的

    2024年02月09日
    浏览(45)
  • 【uniapp】小程序中input输入框的placeholder-class不生效解决办法

    问题描述 uniapp微信小程序,使用input组件时,想要改变提示词 placeholder 的样式,但是使用 placeholder-class 改变不了 如下: 问题分析  如果你在使用`scoped`属性时无法改变`placeholder`的样式,可能是由于 样式的优先级问题 。在CSS中,选择器的优先级是根据其特定性和声明顺序来

    2024年02月04日
    浏览(47)
  • 记录一次开机内存分析的全过程

    作者:zzy的学习笔记 记录一次开机内存分析的全过程,尽量详尽的介绍常用内存分析工具和命令行的使用,结合具体问题探讨开机内存分析的实践经验。通过这篇文章我会介绍开机内存的常用测试分析工具的基本使用方法,以及如何通过抓取出来的内存数据得出下一步的分析

    2024年02月07日
    浏览(44)
  • 记录一次uniapp实现APP自动升级

    app的版本管理和升级,是一个不可或缺的功能,而uniapp则是提供了一整套的流程,由于官方文档过于复杂,而且写的云里雾里的,所以个人记录一次我的操作,直到配置成功。 一共分为2个部分,官方提供的两个插件( uni-upgrade-center - Admin 和 uni-upgrade-center - App )配套使用,

    2024年01月23日
    浏览(54)
  • 千兆宽带只剩下百兆了,记录一次排查过程

    事情是这样的:昨晚PUBG有大更新,但是下载的时候我突然发现速度只剩下10M/s左右了,用speedtest测了下只剩下了百兆宽带,我家明明是千兆宽带的。然后就开始了排查,没想到这一搞就是3小时。 这是排查前我家的网络拓扑: 几点说明: 1.全部网络设备都是千兆口,还有几个

    2024年02月05日
    浏览(49)
  • 记录一次armbian系统搭建路由功能的失败过程

    根据 使用 Debian 作为路由器 :: 星野玲的博客 https://blog.bling.moe/post/3/ 优化ubuntu dns解析,关掉systemd-resolved - MR__Wang - 博客园 https://www.cnblogs.com/xzlive/p/17139520.html ChatGPT 背景需求,新入手了一款RK3568系列的小主机,带有2*2.5G+2*1G+WIFI的配置的,想要替换当前的新三路由器 三者相结合 最

    2023年04月25日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包