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

querySelectorAll仅支持单HTML文件?多页面密码切换功能异常

密码显示切换功能仅register.html生效,login.html无响应的原因

问题背景

我有register.html和login.html两个页面,原本在Stack Overflow代码片段中,点击眼睛图标可以切换密码输入框的type属性(在password和text之间切换)。但拆分到独立文件后,只有register.html的眼睛功能正常,login.html的眼睛点击后毫无反应,且console.log(eye.length)输出结果为1。两个页面都通过<script src="js/script.js"></script>引入了同一个脚本文件。

现有代码

JS代码(script.js)

let eye = document.querySelectorAll('.eye');
console.log(eye.length);
let pass = document.querySelectorAll('.password');
eye.forEach(function (v, i) {
    v.addEventListener('click', function () {
        this.classList.toggle('fa-eye-slash');
        const type = pass[i].getAttribute('type') === 'password' ? 'text' : 'password';
        pass[i].setAttribute('type', type);
    })
});

CSS代码

.fa-eye {
    position: absolute;
    font-size: 24px;
    cursor: pointer;
}

register.html的密码输入区域

<div class="password-container">
    <input class="input-field-register password" type="password" placeholder="Passwort" maxlength="16">
    <i class="fa-solid fa-eye eye"></i>
</div>

login.html的密码输入区域

<div class="password-container">
    <input class="input-field-login password"type="password" placeholder="Passwort" maxlength="16">
    <i class="fa-solid fa-eye eye"></i>
</div>

问题原因

问题出在login.html的input标签属性书写错误:

看login.html里的input代码:

<input class="input-field-login password"type="password" placeholder="Passwort" maxlength="16">

这里class="input-field-login password"的闭合引号后没有空格,直接跟了type="password"。浏览器解析HTML时,会把password"type当成class属性的一部分,导致这个input实际上没有被添加password类。

而你的JS代码是通过.password类来获取密码输入框的,所以在login.html中pass数组的长度为0。当点击眼睛图标时,执行pass[i].getAttribute('type')会因为pass[0]是undefined而抛出错误,回调函数中断,自然看不到任何切换效果。

反观register.html的input标签,class属性结束后有空格再写type属性,password类被正确识别,所以功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:40:55