复选框通过 vb.net 激活 asp.net 文本框

Checkbox activates textboxes in asp.net with vb.net

本文关键字:net asp 文本 激活 复选框 vb      更新时间:2023-09-26

我正在使用 vb.net asp.net 创建一个页面,并且我有一个复选框,我想用它来激活四个文本框和一个下拉列表。 我尝试使用JavaScript来使其工作,但到目前为止它不起作用。 此时我已尝试仅激活一个文本框。 有什么建议吗?

以下是我的不同对象:

  • cb从业者(复选框)
  • txtNPI(文本框)
  • txt许可证(文本框)
  • txtDEA(文本框)
  • txtUpin (文本框)
  • ddSpecialty (下拉列表)

以下是Javascript代码:

<script type="text/javascript">
    function ToggleTextBox(cbPractitioner, txtNPI) {
        var textbox = document.getElementById(txtNPI);
        if (cbPractitioner.checked) {
            txtNPI.disabled = false;
            txtNPI.value = "";
        }
        else {
            txtNPI.disabled = true;
            txtNPI.value = "";
        }
    }
 </script>

这是 asp.net 代码:

<asp:CheckBox ID="cbPractitioner" runat="server" 
                text="This person is a Practitioner" 
                style="font-family: Arial, Helvetica, sans-serif; font-size: small" 
                onclick="ToggleTextBox(this,'txtNPI')" />
<asp:Label ID="lblNPI" runat="server" CssClass="style9" Text="NPI:"></asp:Label>
            &nbsp;
            <asp:TextBox ID="txtNPI" runat="server" Width="165px" style="text align:left" CssClass="style9" 
                    Font-Names="Arial" Font-Size="Small" Enabled="false"></asp:TextBox>
            <br />
            <br />
            <asp:Label ID="lblDEA" runat="server" CssClass="style9" Text="DEA Number:">    </asp:Label>
            &nbsp;
            <asp:TextBox ID="txtDEA" runat="server" style="text-align:left" Font-Names="Arial" 
                    Font-Size="Small" Enabled="false"></asp:TextBox>
            <br />
            <br />
            <span class="style9">
            </span>
        </td>
        <td class="style14" valign="top">
            <asp:Label ID="lblLicense" runat="server" CssClass="style9" 
                Text="License Number:"></asp:Label>
            &nbsp;
            <asp:TextBox ID="txtLicense" runat="server" Font-Names="Arial"  style="text-align:left"
                    Font-Size="Small" Height="20px" Enabled="false"></asp:TextBox>
            <br />
            <br />
            <span class="style9">
            <asp:Label ID="Upin" runat="server" Text="Upin:"></asp:Label>
            &nbsp;
            </span>
            <asp:TextBox ID="txtUpin" runat="server" Width="173px" CssClass="style9" style="text-align:left"
                    Font-Names="Arial" Font-Size="Small" Enabled="false"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td colspan="2">
            <asp:Label ID="lblSpecialty" runat="server" 
                style="font-family: Arial, Helvetica, sans-serif; font-size: small" 
                Text="Specialty:"></asp:Label>
            <asp:DropDownList ID="ddSpecialty" runat="server" 
                DataSourceID="Practitioner_Specialty" DataTextField="SPEC_TITLE" 
                DataValueField="SPEC_TITLE" Enabled="false">
            </asp:DropDownList>

问题是 ASP.net 文本框和其他控件实际上有两个 ID:服务器端 ID 和客户端 ID

服务器端 ID 是您在标记中指定的带有 ID='foo' RunAt='server' 的 ID。 在所有服务器端 .net 代码中使用此 ID。

对于客户端代码,必须使用客户端 ID。 客户端 ID 是从服务器端 ID 生成的,并向其添加了一些字符以确保它是唯一的。 为了在Javascript中获取客户端ID,请编写如下内容:

var cbPractitionerId = '<%=cbPractitioner.ClientID %>';

您将 id 传递给名为"txtNPI"的函数,但您像使用对象一样使用它。 我已经更改了代码以使用对象"文本框",并添加了"removeAttribute"以删除文本框的禁用状态。

<script type="text/javascript">
    function ToggleTextBox(cbPractitioner, txtNPI) {
        var textbox = document.getElementById(txtNPI);
        if (cbPractitioner.checked) {
            textbox.removeAttribute('disabled');
            textbox.value = "";
        }
        else {
            textbox.removeAttribute('disabled');
            textbox.value = "";
        }
    }
 </script>

此外,如果要将 ASP.NET 动态 ID 插入到 JavaScript 中,则应使用语法 <%= Control.ControlID %>,这将插入动态生成的控件名称。