如何通过点击 切换密码可见性并同步更新眼睛图标
发布时间 - 2026-01-07 00:00:00 点击率:次切换密码可见性并同步更新眼睛图标 " />
本文详解 javascript 中因 `img.src` 返回绝对路径导致图片切换失效的问题,提供使用 `getattribute('src')` 获取原始相对路径的正确方案,并附带健壮性优化与完整可运行示例。
在 Web 表单中,实现“密码可见/隐藏”功能时,常需同步切换输入框类型(type="password" ↔ type="text")和眼睛图标(如 eye.png ↔ eyec.png)。但初学者常遇到图标不切换的问题——表面看逻辑正确,实则源于对 DOM 属性 src 的误解。
元素的 .src 属性返回的是浏览器解析后的完整绝对 URL(例如 file:///C:/project/eye.png 或 https://example.com/eye.png),而非 HTML 中写的相对路径 eye.png。因此,直
接用 == "eye.png" 比较必然失败。
✅ 正确做法是使用 element.getAttribute('src'),它精准返回 HTML 标签中声明的原始字符串值:
function fun1() {
const eyeImg = document.getElementById("eye");
const currentSrc = eyeImg.getAttribute("src");
if (currentSrc === "eyec.png") {
eyeImg.src = "eye.png";
} else if (currentSrc === "eye.png") {
eyeImg.src = "eyec.png";
}
}⚠️ 更进一步,建议增强代码鲁棒性:
- 使用严格相等 === 替代 ==;
- 添加默认 fallback,避免因初始路径异常导致逻辑中断;
- 合并两个函数逻辑,提升可维护性。
优化后的完整函数如下:
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 中只需绑定一次事件:
? 注意事项:
- 确保 eye.png 和 eyec.png 文件存在于与 HTML 同级目录,或按实际路径调整;
- 若使用构建工具(如 Webpack/Vite),静态资源路径可能需通过 public/ 或 assets/ 引用,此时应统一使用 import 或环境变量处理;
- 推荐为眼睛图标添加 cursor: pointer CSS 样式,提升用户可感知性;
- 生产环境中建议增加 aria-label 和 role="button",保障无障碍访问。
该方案简洁、可靠,彻底规避了路径解析差异带来的陷阱,是前端表单交互中的典型最佳实践。
# css
# javascript
# word
# java
# html
# 前端
# vite
# 浏览器
# 工具
# 环境变量
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows Hello人脸识别突然无法使用
Laravel PHP版本要求一览_Laravel各版本环境要求对照
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
图册素材网站设计制作软件,图册的导出方式有几种?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Python面向对象测试方法_mock解析【教程】
java获取注册ip实例
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
简历在线制作网站免费版,如何创建个人简历?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何用PHP快速搭建CMS系统?
如何快速搭建高效WAP手机网站吸引移动用户?
韩国服务器如何优化跨境访问实现高效连接?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
Laravel storage目录权限问题_Laravel文件写入权限设置
网站制作企业,网站的banner和导航栏是指什么?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Android利用动画实现背景逐渐变暗
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何在阿里云ECS服务器部署织梦CMS网站?
如何在Windows 2008云服务器安全搭建网站?
如何快速生成可下载的建站源码工具?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
深圳网站制作培训,深圳哪些招聘网站比较好?
JavaScript如何实现继承_有哪些常用方法
Swift中switch语句区间和元组模式匹配
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
🚀拖拽式CMS建站能否实现高效与个性化并存?
公司门户网站制作流程,华为官网怎么做?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
如何快速使用云服务器搭建个人网站?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何在宝塔面板创建新站点?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
三星、SK海力士获美批准:可向中国出口芯片制造设备
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤

