解决使用input框的自动填充和浏览器缓存密码问题

919 阅读1分钟


最近在开发前端项目时遇到这个问题,在输入框使用类型为password时浏览器会自动填充已缓存的密码,还会显示保存的密码,这对设置密码时是非必要的,这个问题找了几个小时都没有合适的解决方法,最终通过监听字段的方法解决了这个问题,解决如下

<el-input
    v-model="changePassword.checkPassword"
    type="text"
    autocomplete="new-password"//防止浏览器自动填充密码
    placeholder="请输入新密码"
></el-input>

将类型换为text,主要原理就是通过watch监听密码的变化,定义一个字段保存输入的数据,然后将输入的字符换成‘*’,就能做到密文输入密码的效果,当然如果不需要密文就直接加上属性autocomplete="new-password"就解决了。


监听方法如下:

 watch: {
    "checkPassword": function (newval, oldval) {
      //如果是删除字符
      if (newval.length < oldval.length) {
        //计算删除的个数(解决用户在删除时进行鼠标选择删除的情况)
        let delLength = oldval.length - newval.length;
        password = password.substr( 0 , password.length - delLength);
        checkPassword = checkPassword.substr( 0,checkPassword.length - delLength);
      } else {
        //如果是添加字符
        //因为在将显示密码最后一位设置为*时又走进了一遍监听方法,所以要添加这个判断条件
        if (newval.charAt(newval.length - 1) != "*") {
          //password保存用户输入的密码,每添加一个字符修改一次
          password += newval.charAt(newval.length - 1);
        }
        //改变新的显示密码(*)
        let res = newval.split("");
        res.forEach((element, index) => {
          res.splice(index, 1, "*");
        });
        checkPassword = res.join("");
      }
    }
  }

其中password就是最终的输入结果,checkPassword是显示的密码,完美解决