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

如何通过jQuery单选按钮选择启用/禁用指定TextBox控件?

解决ASP.NET单选按钮控制文本框启用/禁用的问题

看起来你已经搭好了基础框架,但可能因为ASP.NET Web Forms的控件ID渲染机制,导致你的jQuery代码没能正确定位到目标元素。我来帮你修正这个问题,确保交互功能正常跑起来。

问题分析

你的需求很明确:当RadioButtonList选中「INATIVOS(值为I)」时启用txtInatividade文本框,选中「1º PEDIDO(值为C)」时禁用它。原代码的核心问题在于没有正确处理ASP.NET控件的客户端ID——带runat="server"的控件,ASP.NET会自动生成唯一的ClientID(比如可能变成ctl00_ContentPlaceHolder1_rdbDados),直接用静态ID#rdbDados或#inatividade会找不到元素。另外,页面加载时默认选中的是「1º PEDIDO」,文本框初始状态也应该是禁用的,这一步在原代码里缺失了。

修正方案一:使用ClientID绑定选择器

这是最稳妥的方式,不管控件层级如何变化,都能准确找到元素:

$(document).ready(function() {
    // 页面加载时先初始化文本框的禁用状态
    var selectedValue = $("#<%=rdbDados.ClientID%> input:radio:checked").val();
    $("#<%=txtInatividade.ClientID%>").prop("disabled", selectedValue !== "I");

    // 绑定单选按钮组的change事件
    $("#<%=rdbDados.ClientID%>").on("change", function() {
        var selectedVal = $(this).find("input:radio:checked").val();
        // 根据选中值切换文本框状态
        $("#<%=txtInatividade.ClientID%>").prop("disabled", selectedVal !== "I");
    });
});

修正方案二:设置ClientIDMode为Static(ASP.NET 4.0+)

如果你用的是ASP.NET 4.0及以上版本,可以给控件设置ClientIDMode="Static",让客户端ID和服务器端ID完全一致,代码会更简洁:

首先修改ASP.NET控件:

<!-- 修改RadioButtonList -->
<asp:RadioButtonList ID="rdbDados" name="rdbDados" CssClass="radioItens2" runat="server" RepeatDirection="Horizontal" Style="width: 319px;" ClientIDMode="Static">
<asp:ListItem Text="1º PEDIDO" Value="C" Selected="True"></asp:ListItem>
<asp:ListItem Text="INATIVOS" Value="I"></asp:ListItem>
</asp:RadioButtonList>

<!-- 修改TextBox -->
<asp:TextBox runat="server" Width="50px" ID="txtInatividade" name="inatividade" ClientIDMode="Static"></asp:TextBox>

然后对应的jQuery代码简化为:

$(document).ready(function() {
    // 初始化状态
    $("#inatividade").prop("disabled", $("#rdbDados input:radio:checked").val() !== "I");

    $("#rdbDados").change(function () {
        var selectedVal = $(this).find("input:radio:checked").val();
        $("#inatividade").prop("disabled", selectedVal !== "I");
    });
});

关键说明

  • 一定要把代码放在$(document).ready()里,确保DOM加载完成后再执行脚本,避免找不到控件。
  • 用prop("disabled", ...)来设置禁用状态,这是jQuery推荐的方式,比attr()更可靠。
  • 初始化状态的步骤很重要,否则页面刚加载时文本框会处于可用状态,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:56