经排查,浏览器在自动填充密码之后并没有触发
onchange
事件,但是用原生dom的语法读取输入框时,发现确实已经输入。
修复方法如下
↓ 会员用户可见内容 ↓
js
// ===修复谷歌浏览器密码填充没有双向绑定的问题==
// 循环输入框,读取到内容之后直接赋值到原有的对象
function fixGooglePasteBug() {
const input = document.querySelectorAll('input')
input.forEach(item => {
if (item.type == 'password' && item.value){
unref(modelRef).password = item.value
}
if (item.type == 'text' && item.value){
unref(modelRef).username = item.value
}
})
}
在提交按钮位置,调用上述代码再次赋值,为了安全起见,可用nextTick
等待数据填充完成再次调用接下来的逻辑
js
async function handleValidateButtonClick(e: MouseEvent) {
fixGooglePasteBug()
await nextTick();
//... 正常逻辑
}