如何在客户端单击CheckBox时禁用TextBox

时间:2010-04-03 20:13:26

标签: .net asp.net javascript checkbox client-side

如何使用asp:TextBoxclient-side点击HTML checkbox或服务器端asp:CheckBox时停用JavaScript

<script type="text/javascript" language="javascript">
    function enableTextbox() {
        // ?
    }
</script>

<table>
    <tr>
        <td>
            <input id="checkTake" onclick="enableTextbox" title="Take?" />
        </td>
    </tr>
    <tr>
        <td>
            <asp:TextBox runat="server" ID="txtCommission" />
        </td>
    </tr>
</table>

3 个答案:

答案 0 :(得分:3)

这里棘手的部分是ASP.NET为所有id元素分配自动生成的runat="server"属性,包括TextBox。一个简单的解决方案是将生成的id“注入”脚本:

function enableTextbox() {
   var txtCommision = document.getElementById("<%= txtCommision.ClientID %>");
   txtCommision.disabled = !this.checked;
}

如果您不喜欢这种类型的“意大利面条代码” - 也许您希望将JavaScript放在单独的文件中 - 您可以避免使用id来选择<input>字段。相反,你可以使用class来装饰它。在这种情况下,您可能希望使用某种选择器库来在JavaScript中查找控件,jQuery是一种流行的选项。

答案 1 :(得分:2)

<script type="text/javascript" language="javascript">
    function enableTextbox(checkbox) {
        document.getElementById('<%= txtCommission.ClientID %>').disabled = !document.getElementById(checkbox).checked;
    }
</script>

<table>
    <tr>
        <asp:CheckBox runat="server" ID="checkTake" onclick="enableTextbox(this.id)" Checked="true" Text="Take?" />
    </tr>
    <tr>
        <td>
            <asp:TextBox runat="server" ID="txtCommission" MaxLength="8" CssClass="right" />
        </td>
    </tr>
</table>

答案 2 :(得分:1)

function enableTextbox() {
  document.getElementById("<%= txtCommision.ClientID %>").disabled = !document.getElementById("checkTake").checked;
};

您还需要实际调用enableTextbox:

<input id="checkTake" onclick="enableTextbox()" title="Take?" />

jQuery的:

  $(document).ready(function () {
    $('#checkTake').bind('click', function () {
      $('#<%= txtCommission.ClientId %>').attr('disabled', !$(this).attr('checked'));
    });
  });