在ASCX用户控件的GridView中实现勾选复选框禁用TextBox
解决GridView中勾选CheckBox禁用对应TextBox的问题
我来帮你搞定这个功能!你现在已经搭好了基础的事件绑定框架,只需要完善JavaScript里的逻辑,找到对应行的TextBox并控制它的禁用状态就可以了。
核心思路
GridView的每一行都是独立的<tr>元素,我们可以通过当前点击的CheckBox向上遍历找到它所在的行,再在该行内定位到对应的txtCause文本框,最后根据CheckBox的勾选状态来设置文本框的禁用属性。
修改后的代码实现
保持你的GridView结构不变,只需要更新grisé函数即可:
function grisé(obj) { // 找到当前CheckBox所在的表格行 var row = obj.closest('tr'); // 在该行中查找ID以"txtCause"结尾的TextBox(适配ASP.NET生成的带前缀ID) var txtCause = row.querySelector('[id$="txtCause"]'); // 根据CheckBox的勾选状态,设置TextBox的禁用状态 txtCause.disabled = obj.checked; }
补充说明
- 控件ID匹配逻辑:ASP.NET会给服务器控件生成带前缀的ID(比如
gvModifOuvrageNonControles_ctl02_txtCause),用[id$="txtCause"]这种“ID以txtCause结尾”的选择器,能准确定位到每行对应的TextBox。 - 老浏览器兼容方案:如果需要兼容不支持
closest方法的旧浏览器,可以用以下代码替代行查找逻辑:var row = obj; while (row.tagName !== 'TR') { row = row.parentNode; } - 效果验证:现在勾选CheckBox时,对应的文本框会变灰并禁用;取消勾选时,文本框会恢复可用状态。
内容的提问来源于stack exchange,提问作者user12456581
相关产品推荐
相关产品推荐

