VUE阻止浏览器记住密码若依CLOUD(INPUT框密码替换圆点)

网上找的要不就是缺少方法要不就是不好用,故发一个完整的
粘贴可用版本

javascript 复制代码
  <el-form-item prop="password">
        <el-input v-model="loginForm.pwdCover" type="text" name="pwd" id="pwd" placeholder="密码" autocomplete="off" @input="setPassword"><i slot="prefix" class="el-icon-lock"></i></el-input>
      </el-form-item>
javascript 复制代码
      loginForm: {
        username: "",
        password: "",
        pwdCover:"",
      },
      password: "",
javascript 复制代码
setPassword(val) {
      let realarr = this.password.split(''); // 真实密码
      let coverarr = val.split(''); // 覆盖的密码数组
      let coverlen = coverarr.length; // 覆盖的密码数组
      let realLen = realarr.length; // 覆盖的密码数组
      let lastchar = ''; // 新输入的字符 
      let index = -1; // 新输入的字符位置
      coverarr.forEach((el, elIndex) => {

      if (el !== '●') {
        // 截取未被替换为·的字符串,即为本次键入的内容
          index = elIndex;
          lastchar = lastchar + el; // 因为监听的是每次输入框的变化值,所以插入的一定是连贯的字符串
        }
      });
      if (lastchar.length) {
        index = ( index + 1 ) - lastchar.length // 有输入的字符串,计算真正的插入位置
      }
      if (realLen +lastchar.length === coverlen) {
        // 未删除字符串且新增字符,直接插入
        realarr.splice(index, 0, lastchar);
      } else if (index === -1) {
        //index = -1 即未找到非*号字符,没有新增,无法通过该方法判断在哪个位置删除的
        // 使用selectionStart获取光标位置,确定位置,删去缺少的元素个数
        let pos = document.getElementById('pwd').selectionStart; 
        realarr.splice(pos, realLen - coverlen);
      } else {
        // 替换字符
        realarr.splice(index, (realLen + lastchar.length)-coverlen, lastchar);
      }
        // 将 pwdCover 替换成 ●
        this.loginForm.pwdCover = val.replace(/\S/g, '●');
        this.loginForm.password = realarr.join('');
        this.password = realarr.join('');
    },

粘贴不可用版本(需要手工一个个字符键入)

javascript 复制代码
setPassword(val) {
        // let reg = /[0-9a-zA-Z]/g; // 只允许输入字母和数字
        let nDot = /[^●]/g; // 非圆点字符
        let index = -1; // 新输入的字符位置
        let lastChar = void 0; // 新输入的字符
        let realArr = this.password.split(''); // 真实密码数组
        let coverArr = val.split(''); // 文本框显示密码数组
        let coverLen = val.length; // 文本框字符串长度
        let realLen = this.password.length; // 真实密码长度
        // 找到新输入的字符及位置
        coverArr.forEach((el, idx) => {
            if(nDot.test(el)) {
                index = idx;
                lastChar = el;
            }
        });
        // 判断输入的字符是否符合规范,不符合的话去掉该字符
        // if(lastChar && !reg.test(lastChar)) {
        //     coverArr.splice(index, 1);
        //     this.loginForm.pwdCover = coverArr.join('');
        //     return;
        // }
        if (realLen < coverLen) {
            // 新增字符
            realArr.splice(index, 0, lastChar);
        } else if (coverLen <= realLen && index !== -1) {
            // 替换字符(选取一个或多个字符直接替换)
            realArr.splice(index, realLen - (coverLen - 1), lastChar);
        } else {
            // 删除字符,因为 val 全是 ● ,没有办法匹配,不知道是从末尾还是中间删除的字符,删除了几个,不好对 password 处理,所以可以通过光标的位置和 val 的长度来判断
            let pos = document.getElementById('pwd').selectionEnd; // 获取光标位置
            realArr.splice(pos, realLen - coverLen);
        }
        // 将 pwdCover 替换成 ●
        this.loginForm.pwdCover = val.replace(/\S/g, '●');
        this.loginForm.password = realArr.join('');
        this.password = realArr.join('');
    },

    getCode() {
      getCodeImg().then(res => {
        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
        if (this.captchaOnOff) {
          this.codeUrl = "data:image/gif;base64," + res.img;
          this.loginForm.uuid = res.uuid;
        }
      });
    },
相关推荐
ChoSeitaku5 分钟前
NO.2|proto3语法|消息类型|通讯录|文件读取|enum类型
java·服务器·前端
小J听不清11 分钟前
CSS 边框(border)全解析:样式 / 宽度 / 颜色 / 方向取值
前端·javascript·css·html·css3
用户2557788508112 分钟前
axios全局重复请求取消
前端
前端付豪16 分钟前
实现一个用户可以有多个会话
前端·后端·llm
林古23 分钟前
我在 WSL 里控制 Windows Chrome 的一次实战复盘(OpenClaw)
前端
想不到一个好的ID42 分钟前
Claude Code 初学者必看指南
前端·后端
用户3365663421743 分钟前
Vue3+Vite项目极致性能优化:从构建到运行全链路实战指南
vue.js
一枚菜鸟_44 分钟前
04-Flutter状态管理终极指南-Riverpod3.x从入门到精通
前端
一枚菜鸟_1 小时前
06-Flutter动画从零到炫酷-让你的App动起来
前端
Wect1 小时前
React Hooks 核心原理
前端·算法·typescript