当前位置: 首页 > news >正文

element-plus中,vue3项目,el-input密码框禁止浏览器自动弹出浏览器历史密码提示框

原代码(密码框是text框):

<el-form-item label="用户名" :label-width="formLabelWidth" v-if="!localOrhuawei" prop="userName"><el-input v-model="formDialog.userName" /></el-form-item><el-form-item label="密码" :label-width="formLabelWidth" v-if="!localOrhuawei" prop="passWord"><el-input v-model="formDialog.passWord" /></el-form-item>

现加需求:el-input改为密码框,但要求el-input密码框禁止浏览器自动弹出浏览器历史密码提示框

<el-form-item label="用户名" :label-width="formLabelWidth" v-if="!localOrhuawei" prop="userName"><el-input v-model="formDialog.userName" /></el-form-item><el-form-item label="密码" :label-width="formLabelWidth" v-if="!localOrhuawei" prop="passWord"><el-input v-model="formDialog.passWord" show-password /></el-form-item>

效果:当密码有值时正常显示,当密码无值时就会自动弹出历史的用户密码列表弹框。

那如何不显示历史记录弹框呢?

想到通过v-if去控制显示密码框,代码如下:

<el-form-item label="密码" :label-width="formLabelWidth" v-if="!localOrhuawei" prop="passWord"><el-input  ref="passwordInput" v-model="formDialog.passWord" v-if="passwordType === 'password'" type="password" show-password autocomplete="new-password"/><el-input v-elseref="passwordInput"v-model="formDialog.passWord" type="text"autocomplete="off"/></el-form-item>import { reactive, ref, onMounted, watch,nextTick } from "vue";const passwordType = ref('text');
const passwordInput = ref();watch(() => formDialog.passWord,(nv,ov) => {if(!nv){passwordType.value = 'text'}else{passwordType.value = 'password'}}
);

 效果:当清空值时,确实不会再弹出浏览器的历史记录列表了,但我发现当我输入一个数字后,input框就自动失焦了,但如果再次聚焦就可以连续输入了。

根本原因分析

  1. 当密码清空时,组件从密码类型切换到文本类型(重新渲染)

  2. 输入第一个字符时触发 v-model 更新,值不为空又切换回密码类型(再次重新渲染)

  3. 每次重新渲染都会导致焦点丢失。

解决方式:在监听值改变后,修改密码框类型后,直接聚焦即可解决问题;

watch(() => formDialog.passWord,(nv,ov) => {if(!nv){passwordType.value = 'text'}else{passwordType.value = 'password'}//切换input框类型后,重新聚焦nextTick(() => {passwordInput.value?.focus()})}
);

 

相关文章:

  • 关于Stream
  • 使用ffmpeg截取MP3等音频片段
  • ubuntu 挂载硬盘
  • Notion Windows桌面端快捷键详解
  • Solana批量转账教程:提高代币持有地址和生态用户空投代币
  • 高防ip是怎么做到分布式防御的
  • Decode rpc invocation failed: null -> DecodeableRpcInvocation
  • 计算机网络中相比于RIP,路由器动态路由协议OSPF有什么优势?
  • 多线程的出现解决了什么问题?深入解析多线程的核心价值
  • Loly: 1靶场渗透
  • C++ 备忘录模式详解
  • 【AWS+Wordpress-准备阶段】AWS注册+创建EC2实例
  • 基于nnom的多选择器
  • JNDI 注入原理解析
  • 五子棋html
  • Kubernetes(k8s)学习笔记(九)--搭建多租户系统
  • 深入浅出HTML:构建现代网页的基石
  • Vue:现代前端开发的基石引擎
  • ActiveMQ 源码剖析:消息存储与通信协议实现(一)
  • DeepSeek系列论文解读四之DeepSeek Prover V2
  • 印度最新发声:对所有敌对行动均予以反击和回应,不会升级冲突
  • 咸宁市委常委、市纪委书记官书云调任湖北省司法厅副厅长
  • 4月证券私募产品备案量创23个月新高,股票策略占比超六成
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯
  • 涨知识|没想到吧,体育老师强调的运动恢复方法是错的?
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役