Отключить текстовое поле, когда флажок не установлен внутри повторителя

В моем.aspx следующие элементы находятся внутри повторителя:

<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 ответа

Это потому что 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);
});

Пример скрипки

Используйте OnClientClick="EnableDisableTextBox()" вместо OnClick

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

Попробуй это

function EnableDisableTextBox() {
     if ($('#<%= chkNormalServiceCost.ClientID%>').is(':checked') == true)
         $('#<%= txtNormalServiceCost.ClientID%>').prop('disabled', false);
     else
         $('#<%= txtNormalServiceCost.ClientID%>').prop('disabled', true);
}
Другие вопросы по тегам