前言
好几次测试给我提了同一个问题。
打开弹窗时,手机号输入框会自动输入“1”。
一开始我以为是偶先问题。
我检查了好几次,输入框没有默认值啊???这咋回事???
寻找问题
我就照常打开会员管理的弹窗,里面数据都是清清爽爽的,没有出现自动填入数据的情况啊😅。
接着排查了所有可能初始化的内容,都没有找到会默认设置“1”的情况。
直到我发现,选择个体工商户后,会需要选择是否是法人选项。
这里单选项的默认取值是“1”。
难道说?是这里的默认值“1”赋值给了手机号输入框?
我尝试隐藏了单选项,结果没有再出现手机号存在默认值“1”的问题。
解决问题
单选项是通过v-if条件渲染的。
Vue 的 DOM 复用机制
Vue 在渲染时会尽可能复用已有的 DOM 元素以提升性能。例如:
- 当两个输入框的结构相似(如
type、placeholder不同但其他属性相同)时,Vue 会复用同一个 DOM 节点,仅更新差异属性(如id),而不会清空已输入的value值。 - 后果:如果通过
v-if切换输入框类型,未销毁的 DOM 节点可能导致旧值残留到下一个输入框中。
所以在销毁 DOM 后,一定要记得清空数据。
注意:
若在 DOM 节点销毁前,就清空数据,可能会触发 DOM 元素复用机制,将旧值传给上个数据。