登录
首页 >  文章 >  前端

点击切换密码可见性,如何同步更新眼睛图标

时间:2026-01-10 11:51:42 240浏览 收藏

文章不知道大家是否熟悉?今天我将给大家介绍《点击切换密码可见性,同步更新眼睛图标方法》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

如何通过点击 div 切换密码可见性并同步更新眼睛图标

本文详解如何修复因 `img.src` 返回完整 URL 导致的图标切换失效问题,通过 `getAttribute('src')` 获取原始相对路径,并实现密码类型与图标状态的双向同步。

在 Web 表单中,常见的“密码可见性切换”功能通常包含两个联动行为:一是切换 <input type="password"> 与 <input type="text">,二是同步更新右侧眼睛图标的显示(如 eye.png ↔ eyec.png)。但许多开发者会遇到图标不切换的问题——表面逻辑正确,实际却无响应。根本原因在于:img.src 属性返回的是浏览器解析后的绝对 URL(如 file:///.../eye.png),而非 HTML 中写的相对路径 eye.png,因此直接用 === "eye.png" 比较必然失败。

✅ 正确做法是使用 element.getAttribute('src'),它精确读取 HTML 标签中声明的原始属性值:

function fun1() {
  const eyeImg = document.getElementById("eye");
  const currentSrc = eyeImg.getAttribute("src"); // ✅ 获取原始 src 值,如 "eye.png"

  if (currentSrc === "eyec.png") {
    eyeImg.src = "eye.png";
  } else if (currentSrc === "eye.png") {
    eyeImg.src = "eyec.png";
  }
}

同时,建议优化整体逻辑,避免冗余判断和潜在竞态。以下是重构后的健壮版本:

function togglePasswordVisibility() {
  const passwordInput = document.getElementById("password");
  const eyeImg = document.getElementById("eye");

  if (passwordInput.type === "password") {
    passwordInput.type = "text";
    eyeImg.src = "eyec.png"; // 显示“睁眼”图标,表示明文可见
  } else {
    passwordInput.type = "password";
    eyeImg.src = "eye.png"; // 显示“闭眼”图标,表示密码隐藏
  }
}

并在 HTML 中直接调用该函数:

<div onclick="togglePasswordVisibility()" class="eye-btn">
  <img src="eye.png" id="eye" alt="toggle password visibility">
</div>

⚠️ 注意事项:

  • 确保 eye.png 和 eyec.png 文件确实存在于项目根目录(或对应路径),且文件名大小写完全匹配;
  • 推荐为 添加 alt 属性提升可访问性;
  • 生产环境建议使用 CSS 类控制图标(如 .eye--open, .eye--closed),配合背景图或 SVG,更利于维护;
  • 若启用 CSP(内容安全策略),动态修改 src 需确保资源路径符合 img-src 规则。

通过 getAttribute('src') 抓取原始属性值,再结合清晰的状态映射逻辑,即可稳定实现密码可见性与图标状态的精准同步。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>