在转发器内未选中复选框时禁用文本框

时间:2015-03-18 11:38:49

标签: javascript c# jquery asp.net asprepeater

在我的.aspx中,以下元素位于Repeater中:

<asp:CheckBox runat="server" ID="chkNormalServiceCost" Checked="true" OnClick="EnableDisableTextBox()"/>
<asp:TextBox runat="server" ID="txtNormalServiceCost" />

<script>标签中有jQuery函数:

function EnableDisableTextBox() {
    $('#chkNormalServiceCost').change(function () {
        if ($('#chkNormalServiceCost').is(':checked') == true)
            $('#txtNormalServiceCost').prop('disabled', false);
        else
            $('#txtNormalServiceCost').prop('disabled', true);
    });
}

但它仍然无法正常工作。

3 个答案:

答案 0 :(得分:1)

这是因为控件&#39; id属性在呈现时自动生成;客户端不会chkNormalServiceCost。您需要在其上设置ClientID属性:

<asp:CheckBox runat="server" ID="chkNormalServiceCost" ClientID="chkNormalServiceCost" Checked="true" />
<asp:TextBox runat="server" ID="txtNormalServiceCost" ClientID="txtNormalServiceCost" />

然后,您可以使用jQuery添加单击处理程序,而不是在第一个change被触发后附加click事件:

$('#chkNormalServiceCost').change(function () {
    $('#txtNormalServiceCost').prop('disabled', !this.checked);
});

Example fiddle

答案 1 :(得分:0)

试试这个

function EnableDisableTextBox() {
     if ($('#<%= chkNormalServiceCost.ClientID%>').is(':checked') == true)
         $('#<%= txtNormalServiceCost.ClientID%>').prop('disabled', false);
     else
         $('#<%= txtNormalServiceCost.ClientID%>').prop('disabled', true);
}

答案 2 :(得分:0)

使用OnClientClick =&#34; EnableDisableTextBox()&#34;而不是OnClick

<asp:CheckBox runat="server" ID="chkNormalServiceCost" Checked="true" OnClientClick="EnableDisableTextBox()"/>