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

如何让密码显示/隐藏图标点击仅作用于当前点击的图标

解决方案

问题出在你使用了全局类选择器($(".icon-ojo-abierto")),每次点击都会修改页面上所有同名图标,导致两个密码框的图标同步变化。要解决这个问题,核心是只操作当前点击图标所在的密码组内的元素,完全不需要修改图标类名。

步骤1:合并为通用切换函数

把四个冗余的函数整合为一个通用函数,通过传入当前点击的图标元素,精准定位到对应的密码组,只操作组内的图标:

function togglePassword(inputId, trigger) {
    const passwordInput = document.getElementById(inputId);
    // 找到当前图标所在的密码组容器(需要给每个密码输入框+图标套一个class为password-group的div)
    const group = $(trigger).closest('.password-group');
    const isPasswordType = passwordInput.type === 'password';

    // 切换输入框的显示类型
    passwordInput.type = isPasswordType ? 'text' : 'password';
    // 仅切换当前组内的图标显示状态
    group.find('.icon-ojo-abierto').toggleClass('d-none', !isPasswordType);
    group.find('.icon-ojo-cerrado').toggleClass('d-none', isPasswordType);
}

步骤2:调整HTML绑定结构

给每个密码输入框和对应图标包裹一个容器,确保点击图标时能精准定位到所属组:

<!-- 原密码输入组 -->
<div class="password-group">
    <input type="password" id="password">
    <i class="icon-ojo-cerrado" onclick="togglePassword('password', this)"></i>
    <i class="icon-ojo-abierto d-none" onclick="togglePassword('password', this)"></i>
</div>

<!-- 重复密码输入组 -->
<div class="password-group">
    <input type="password" id="passwordConfirmation">
    <i class="icon-ojo-cerrado" onclick="togglePassword('passwordConfirmation', this)"></i>
    <i class="icon-ojo-abierto d-none" onclick="togglePassword('passwordConfirmation', this)"></i>
</div>

核心逻辑说明

  • 通过$(trigger).closest('.password-group')锁定当前点击图标所属的密码组,彻底避免全局操作所有同名图标
  • 用toggleClass替代手动添加/移除d-none,简化显示切换逻辑
  • 合并函数后减少冗余代码,后续维护更便捷

内容的提问来源于stack exchange,提问作者Enrique Carricoba Monterde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:21