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

TypeScript密码可见性切换函数仅生效一次问题求助

密码可见性切换功能修复方案

你的代码问题出在逻辑顺序错误+未基于当前状态做切换:每次调用函数时,你先强制把输入框设为password、图标设为eye-off,紧接着又判断图标是eye-off就改成eye,相当于每次执行后状态被固定,自然只能生效一次。

修复思路:

  • 先获取目标DOM元素,避免重复查询DOM
  • 根据当前输入框的状态,决定切换方向:
    • 如果当前是隐藏状态(输入框type为password),就切换为显示状态
    • 如果当前是显示状态,就切换回隐藏状态

修正后的TypeScript代码:

togglePasswordVisibility() {
  // 获取DOM元素并添加类型断言,避免TS类型报错
  const passwordInput = document.querySelector('#input2') as HTMLInputElement;
  const passwordIcon = document.querySelector('#passwordIcon') as SVGElement;

  // 元素不存在时直接返回,避免后续代码报错
  if (!passwordInput || !passwordIcon) return;

  // 根据输入框当前类型判断切换逻辑
  const isHidden = passwordInput.type === 'password';
  
  if (isHidden) {
    // 切换为显示密码状态
    passwordInput.type = 'text';
    passwordIcon.setAttribute('name', 'eye');
  } else {
    // 切换为隐藏密码状态
    passwordInput.type = 'password';
    passwordIcon.setAttribute('name', 'eye-off');
  }
}

额外优化说明:

  • 用输入框的type属性作为判断依据比图标更可靠,输入框状态是功能核心逻辑
  • 添加元素存在性判断,避免DOM元素未加载完成或不存在时抛出错误
  • 缓存DOM元素,避免每次调用函数都重复查询DOM,提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:39:59