解决element中el-input无法禁用自动填充账号密码问题


项目说明

【配置环境】

  1. vue-cli^4.5.0,创建项目过程请参考 https://cli.vuejs.org/zh/
  2. vue^3.0.0, https://v3.cn.vuejs.org/
  3. element-plus,https://element-plus.gitee.io/#/zh-CN

注:本文只针对测试过的版本进行讲解,其他版本如有问题,可以留言或修改配置进行测试;


问题描述

通常情况下,element表单中el-input组件多次使用,而且同时出现有type为’text’和’password’的组合时,浏览器会自动填充已记录过的账号和密码,本身功能来讲是好意,但是有时我们就是不需要这样的功能,所以需要禁用掉!
官方对于el-input组件有autocomplete属性帮助解决此问题,如图
在这里插入图片描述
填入 autocomplete=‘off’ 相关代码如下:

<el-form-item
  label='账号'
  prop='username'
>
  <el-input
    autocomplete='off'
    placeholder='请输入账号'
    type='text'
    v-model='formData.username'
  ></el-input>
</el-form-item>

<el-form-item
  label='密码'
  prop='password'
>
  <el-input
    autocomplete='off'
    placeholder='请输入密码'
    type='password'
    v-model='formData.password'
  ></el-input>
</el-form-item>

代码是这样写了,但是结果不尽人意,仍然没有效果,网上有类似的解决办法:密码模块做了修改 autocomplete=‘new-password’ ,但是又有了新问题,虽然页面上看起来正常了,打开后台看下呢,会有警告(注:记得以前我也这样解决过的,没有问题,但这次都是全新的版本尝试,可能源码处理方式不同了吧,[尴尬脸]),如图:
在这里插入图片描述
说白了就是你写了"new-password"不是官网给的标准值(on/off);


解决方案

对于有强迫症的开发来讲,去掉不应该出现的警告还是有必要再动手试试的,通过预先设定readonly=true,el-input添加点击事件,当点击时改变readonly=false,至此输入框始终都不会出现自动填充的问题啦~
最终解决代码如下:

<template>
  <div class='form'>
    <el-form
      :model='formData'
      label-width='80px'
    >
      <el-form-item
        label='账号'
        prop='username'
      >
        <el-input
          :readonly='formData.readonly'
          @click='handlerIptClick'
          autocomplete='off'
          placeholder='请输入账号'
          type='text'
          v-model='formData.username'
        ></el-input>
      </el-form-item>

      <el-form-item
        label='密码'
        prop='password'
      >
        <el-input
          :readonly='formData.readonly'
          @click='handlerIptClick'
          autocomplete='off'
          placeholder='请输入密码'
          type='password'
          v-model='formData.password'
        ></el-input>
      </el-form-item>

      <el-form-item>
        <el-button
          @click='submitForm()'
          type='primary'
        >登录</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import { reactive, toRefs } from 'vue';

export default {
  name: 'FormIptAC',
  setup() {
    const formData = reactive({
      username: '',
      password: '',
      readonly: true,
    });

    const methods = reactive({
      handlerIptClick: () => {
        formData.readonly = false;
      },
      submitForm: () => {
        console.log('submitForm');
      },
    });

    const refMehods = toRefs(methods);

    return {
      formData,
      ...refMehods,
    };
  },
};
</script>

<style scoped>
.form {
  padding: 10px 40px 10px 0;
}
</style>


总结

完整代码,请到项目 demo 地址:https://gitee.com/feiyunan/blog-demo/tree/master/demo_02

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值