VS Web应用中jQuery模拟iPhone密码输入致文本框禁用问题求助
解决ASP.NET母版页中jQuery.dPassword插件的禁用与显示问题
我来帮你分析并解决这两个核心问题:文本框无法编辑,以及TextMode="Password"时无值显示的问题。
一、文本框无法编辑的原因与修复
核心问题是你误解了插件prefix参数的作用,导致事件绑定到了不存在的元素上:
- 修正prefix参数
插件的prefix是用来给新生成的文本框ID添加前缀,和原密码控件做区分。但你的原控件ID已经被母版页自动加上了MainContent_前缀,所以不需要再额外添加这个前缀。修改你的调用代码,传入空的prefix:
$(function () { $("[id$=txtMID01]").dPassword({ prefix: '' // 移除多余的前缀设置 }); });
- 调整插件的getId函数
原插件的getId函数是用来从新控件ID中剥离前缀,提取原控件ID。现在prefix为空,我们可以简化这个函数,避免正则匹配出错:
getId = function (id) { // 直接返回ID即可,无需处理前缀 return id; }
- 确认控件未被后台禁用
检查你的ASP.NET控件后台代码,确保没有设置Enabled="false",否则原控件会被渲染为禁用状态,间接影响插件的交互逻辑:
' 确保后台控件是启用状态 txtMID01.Enabled = True
二、TextMode="Password"时无值显示的修复
当设置TextMode="Password"时,浏览器会隐藏密码控件的value属性,插件原代码通过attr('value')无法获取到后台填充的值。我们需要修改插件读取值的方式:
找到插件中获取原控件值的代码:
var value = $(this).attr('value');
替换为用val()方法读取实际值:
var value = $(this).val();
这样插件就能正确读取密码控件的后台填充值,初始化时会把新文本框的内容设置为对应的值并转换为圆点显示。
三、完整的插件修改后关键代码片段
修改后的getId和值读取部分:
(function ($) { $.fn.dPassword = function (options) { var defaults = { interval: 200, duration: 3000, replacement: '%u25CF', prefix: '', // 默认前缀设为空 debug: false } var opts = $.extend(defaults, options); var checker = new Array(); var timer = new Array(); $(this).each(function () { if (opts.debug) console.log('init [' + $(this).attr('id') + ']'); // 省略其他属性读取代码... // 正确读取控件值 var value = $(this).val(); // 省略其他创建新控件的代码... }); // 简化getId函数 getId = function (id) { return id; } // 省略其他函数代码... }; })(jQuery);
四、测试验证
- 保留
TextMode="SingleLine"时:修改后文本框应该可以正常输入,输入的字符短暂显示后变为圆点,后台能获取到输入的值。 - 设置
TextMode="Password"时:后台填充的值会正确显示为圆点,文本框可正常编辑,后台也能获取到输入的真实值。
内容的提问来源于stack exchange,提问作者Jonathan Small
相关产品推荐
相关产品推荐

