如何通过点击 div 切换密码可见性并同步更新眼睛图标
发布时间 - 2026-01-07 00:00:00 点击率:次本文详解如何修复因 `img.src` 返回完整 url 导致的图标切换失效问题,通过 `getattribute('src')` 获取原始相对路径,并实现密码类型与图标状态的双向同步。
在 Web 表单中,常见的“密码可见性切换”功能通常包含两个联动行为:一是切换 与 ,二是同步更新右侧眼睛图标的显示(如 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 = docume
nt.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 中直接调用该函数:
@@##@@
⚠️ 注意事项:
- 确保 eye.png 和 eyec.png 文件确实存在于项目根目录(或对应路径),且文件名大小写完全匹配;
- 推荐为 添加 alt 属性提升可访问性;
- 生产环境建议使用 CSS 类控制图标(如 .eye--open, .eye--closed),配合背景图或 SVG,更利于维护;
- 若启用 CSP(内容安全策略),动态修改 src 需确保资源路径符合 img-src 规则。
通过 getAttribute('src') 抓取原始属性值,再结合清晰的状态映射逻辑,即可稳定实现密码可见性与图标状态的精准同步。
# css
# word
# html
# svg
# 浏览器
# input
# 重构
# 的是
# 见性
# 一是
# 并在
# 而非
# 表单
# 根本原因
# 却无
# 安全策略
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
如何选择可靠的免备案建站服务器?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
原生JS实现图片轮播切换效果
中山网站推广排名,中山信息港登录入口?
Android GridView 滑动条设置一直显示状态(推荐)
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
如何快速登录WAP自助建站平台?
如何在云主机上快速搭建多站点网站?
Laravel如何记录自定义日志?(Log频道配置)
韩国服务器如何优化跨境访问实现高效连接?
如何用VPS主机快速搭建个人网站?
Laravel如何实现API资源集合?(Resource Collection教程)
零服务器AI建站解决方案:快速部署与云端平台低成本实践
网页设计与网站制作内容,怎样注册网站?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Python制作简易注册登录系统
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
如何在橙子建站上传落地页?操作指南详解
如何在宝塔面板中修改默认建站目录?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何使用Service Container和依赖注入?(代码示例)
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
IOS倒计时设置UIButton标题title的抖动问题
如何用PHP工具快速搭建高效网站?
新三国志曹操传主线渭水交兵攻略
如何续费美橙建站之星域名及服务?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何在阿里云域名上完成建站全流程?
如何用低价快速搭建高质量网站?
如何在万网利用已有域名快速建站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
实现点击下箭头变上箭头来回切换的两种方法【推荐】
昵图网官网入口 昵图网素材平台官方入口
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Android使用GridView实现日历的简单功能
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何构建满足综合性能需求的优质建站方案?
Laravel怎么实现模型属性的自动加密
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
北京网站制作的公司有哪些,北京白云观官方网站?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
北京企业网站设计制作公司,北京铁路集团官方网站?
如何在云指建站中生成FTP站点?
Laravel如何实现本地化和多语言支持?(i18n教程)
下一篇:windows7设置在哪里
下一篇:windows7设置在哪里


nt.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"; // 显示“闭眼”图标,表示密码隐藏
}
}