You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现用户名输入框类密码遮蔽且显示1-2个字符?

实现用户名输入框部分遮蔽效果

要实现用户名输入框大部分字符像密码框一样遮蔽,仅显示1-2个字符的效果,我们可以通过隐藏原生输入框,用模拟文本框展示遮蔽内容,同时同步真实输入值的方式实现,具体代码如下:

完整代码实现

HTML 结构

<p2>
  <label for="name">Username </label>
  <!-- 真实输入框,隐藏以存储实际输入值 -->
  <input type="text" id="real-username" name="username" style="display: none;" />
  <!-- 模拟显示框,用于展示遮蔽后的效果 -->
  <input type="text" id="display-username" readonly />
</p2>

<p2>
  <label for="pwd">Password </label>
  <input type="password" name="pwd" />
</p2>

CSS 样式

/* 全局输入框基础样式 */
input {
  width: 40%;
  height: 30px;
  position: relative;
  top: -4px;
  font-size: 20px;
  padding: 0 .3em;
  color: #555555;
}

input[type="password"] {
  color: #000;
}

/* p2标签样式 */
p2{
    position: relative;
    left: -65px;
    display: block;
    margin-block-start: 1em;
    margin-block-end: 1em;
    margin-inline-start: 0px;
    margin-inline-end: 0px;
    text-align: center;
}

/* 模拟输入框的光标处理 */
#display-username {
  caret-color: transparent; /* 隐藏只读框的光标 */
}

JavaScript 逻辑

const realInput = document.getElementById('real-username');
const displayInput = document.getElementById('display-username');

// 同步输入内容并处理遮蔽逻辑
realInput.addEventListener('input', function() {
  const value = this.value;
  if (value.length <= 2) {
    // 输入长度≤2时,直接显示全部内容
    displayInput.value = value;
  } else {
    // 输入长度>2时,用●遮蔽前面的字符,仅保留最后2个可见
    const maskedPart = '●'.repeat(value.length - 2);
    const visiblePart = value.slice(-2);
    displayInput.value = maskedPart + visiblePart;
  }
});

// 点击模拟框时聚焦真实输入框,保证输入触发
displayInput.addEventListener('click', function() {
  realInput.focus();
});

// 同步键盘事件,确保退格、方向键等操作正常
displayInput.addEventListener('keydown', function(e) {
  realInput.focus();
  setTimeout(() => {
    const event = new KeyboardEvent('keydown', {
      key: e.key,
      code: e.code,
      keyCode: e.keyCode,
      which: e.which,
      bubbles: true
    });
    realInput.dispatchEvent(event);
  }, 0);
});

核心逻辑说明

  • 真实输入框#real-username负责存储用户的实际输入内容,通过display: none隐藏;
  • 模拟输入框#display-username仅用于展示遮蔽效果,设置为readonly避免用户直接编辑;
  • 根据输入长度动态切换显示逻辑:短内容全显,长内容仅保留最后2个可见字符,其余用遮蔽符替代;
  • 通过点击聚焦、键盘事件同步,让用户操作体验和原生输入框一致。

内容的提问来源于stack exchange,提问作者ventdestroyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:45:30