本文详解 javascript 中通过点击元素切换密码输入框类型(text/password)和对应图标的实现方法,重点解决因 `src` 属性返回绝对路径导致的图片切换失效问题,并提供健壮、可复用的代码方案。
在 Web 表单开发中,「密码可见性切换」(即点击眼睛图标切换密码明文/密文显示)是常见交互需求。但初学者常遇到:点击后图标不切换、输入框类型无响应——其核心原因在于对 DOM 属性获取方式的理解偏差。
关键问题在于:element.src 返回的是解析后的绝对 URL(如 file:///C:/project/eye.png),而非 HTML 中写的相对路径 eye.png;而 element.getAttribute('src') 才能准确读取原始 HTML 属性值。若直接用 == "eye.png" 比较 src,几乎永远为 false,导致条件判断失效。
以下是优化后的完整解决方案:
function togglePasswordVisibility() {
const passwordInput = document.getElementById("password");
const eyeIcon = document.getElementById("eye");
// 切换输入框类型
if (passwordInput.type === "text") {
passwordInput.type = "password";
} else {
passwordInput.type = "text";
}
// 切换图标(使用 getAttribute 获取原始 src 值)
const currentSrc = eyeIcon.getAttribute("sr
c");
if (currentSrc === "eye.png") {
eyeIcon.src = "eyec.png";
} else if (currentSrc === "eyec.png") {
eyeIcon.src = "eye.png";
}
}HTML 中只需绑定该函数即可(推荐使用语义化结构):
✅ 最佳实践建议:
⚠️ 注意事项:
通过修正属性读取方式并统一逻辑入口,即可稳定实现「一次点击显示明文+切换图标,再次点击恢复密文+切回原图」的预期效果。