记一次特殊情况下的表单input+v-if,导致英文输入法失效的情况

“我正在参加「掘金·启航计划」”。

一、前言

最近有些繁忙,加上合同快到期正在考虑下路就没怎么更文。刚好后台推送了参加活动的消息,要求的量不多就可以冲一冲,今天就简单复述下之前项目里遇到的一个奇怪问题吧。

二、问题描述

表单组件是我们常用的组件,这天我像往常一样,熟练的写完一个又一个表单,刷刷地就提交代码下班了(来自切图仔的自信)。

这时的我还没有发现问题的严重性,直到第二天看到那如山的bug单后,汗不自觉的流了下来。

因为不同表单的内容不同,而且很多就有联动,我就用这v-if去控制切换了,也刚好能规避掉rule规则,根据选中模式的不同,必填项也不同,所以就只好用v-if进行销毁控制了。

然后现象就是这样以下这种:

表单、添加的时候,一切正常,多次切换v-if,input框都是正常
修改的时候,赋了初值,也正常,但多次切换v-if重新渲染后,input框
只能输入数字和中文,英文字母、符号等,均无法输入。

关键还不是所有的表单都会有这个问题,我提交了N个表单,只有少部分表单会出现这种现象。

这就很难受了啊,有bug不可怕,怕就怕是这种不确定的偶发bug,没法定性成常规问题,只能一点点摸索。

三、思索

其实这里就有点怀疑了,是不是赋值了type=”number”属性,但是我又没给这个input加上number属性,也没有做其他的输入限制,光从网页dom元素那边也看不出来区别。

折磨了好久,都没啥效果,好不容易才从某个帖子里得到启发。

image.png

然后我就想起来了,因为v-if销毁后,同个位置是一个只能输入数字的input,估计就是这个导致的,复用了type属性。

四、解决

尝试在表单中加入key属性,果然成功,那么问题就是出在这里了
因为v-if在两个相同组件且没有key标识唯一性的情况下,会复用已有元素而不是从头开始渲染

最终解决,在每个el-form-item加上key值,bug就消失了(直接在input组件加key也可以解决,只是我倾向于在v-if同层添加key值)。

五、一点思考

这次的bug基本上算是意外,种种巧合之下才出现。

但还是有疑问没能解决:

1、为什么表单添加的时候,不会有这种问题,是因为没赋初值的问题吗?
2、这种复用会给平时的代码带来不确定性,明面上逻辑没出问题,但是实际上却是有隐患的
这种情况该如何高效规避?

有兴趣的小伙伴可以试试看,能不能复现我的bug。

ps: 我是地霊殿__三無,希望能帮到你。

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYm6rIql' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片