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

jQuery中数组命名输入框的密码转文本功能失效问题

解决密码切换显示功能在数组形式ID输入框失效的问题

嘿,我之前也碰到过一模一样的问题!你的密码切换代码在普通文本ID(比如#password)下能正常工作,但遇到数组形式的ID(比如#user_password[1])就失效,核心原因是jQuery选择器里的方括号[]是特殊语法字符,直接写的话会被当成属性选择器的一部分,而不是ID的组成部分。

举个例子,当你传入field: "#password[0]"时,jQuery会误以为你要找「ID为password且带有0属性的元素」,而不是「ID就是password[0]的输入框」,自然就找不到目标元素了。

两种可行的解决方案

方案1:自动处理特殊字符(推荐)

修改插件内部的元素获取逻辑,用原生JS的document.getElementById()来获取元素——原生方法可以直接识别包含特殊字符的ID,不需要转义,再转换成jQuery对象即可。修改后的代码如下:

(function($) {
  $.toggleShowPassword = function(options) {
    var settings = $.extend({
      field: "#password",
      control: "#toggle_show_password",
      eye: "#password_eye",
    }, options);

    // 去掉ID前的#,用原生JS获取元素再转jQuery对象
    var fieldId = settings.field.replace(/^#/, '');
    var field = $(document.getElementById(fieldId));
    var control = $(settings.control);
    var eye = $(settings.eye);

    control.bind('click', function() {
      // 切换输入框类型
      var newType = field.attr('type') === 'password' ? 'text' : 'password';
      field.attr('type', newType);
      
      // 这里可以加图标切换的逻辑(比如FontAwesome的眼睛图标)
      if (eye.length) {
        eye.toggleClass('fa-eye fa-eye-slash');
      }
    });
  };
})(jQuery);

这样不管你的ID是普通文本还是数组形式(比如#password[0]),都能正确选中目标输入框。

方案2:手动转义特殊字符

如果你不想修改插件核心代码,也可以在调用插件时手动转义ID里的方括号——用双反斜杠\\转义[和]:

// 调用示例
$.toggleShowPassword({
  field: "#password\\[0\\]",
  control: "#toggle_show_password_0",
  eye: "#password_eye_0"
});

这种方式需要你在每次调用时都手动处理ID,比较繁琐,所以更推荐方案1。

验证一下

修改完代码后,点击切换按钮,数组形式ID的输入框应该就能正常在密码/文本类型之间切换了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:08:53