在ASP.NET中动态地将类添加到只读字段

时间:2016-05-03 09:18:14

标签: javascript c# jquery html asp.net

HTML

<input id="TextBox" type="text" runat="server" readonly="readonly" />

JS

function MyFunct(sender, args) {
                var TextBox = document.getElementById('<%= TextBox.ClientID %>');
                if (true) {
                    TextBox.value = "somevalue";
                    TextBox.setAttribute('readonly', 'readonly');
                    $('#<%= TextBox.ClientID %>').addClass("disabledTb");
                }
                else {
                    TextBox.value = "";
                    TextBox.readOnly = false;
                    $('#<%= TextBox.ClientID %>').removeClass("disabledTb");
                }
        }

CSS

.disabledTb {
            background-color: rgb(235, 235, 228);
            color: rgb(84, 84, 84);
        }

readonly propery正在工作,我不得不将输入从asp:TextBox更改为标准的HTML textobx,否则该值不会被检索到服务器端而我不想使用隐藏的领域。

但是,现在不再应用.disabledTb类了。其余的代码工作正常,并改变

var TextBox = document.getElementById('<%= TextBox.ClientID %>');

var TextBox = document.getElementById('#<%= TextBox.ClientID %>');

导致在控制台中看到空引用

更新

我忘了说我使用的是母版页,所以内容最终会变成类似于&#39; ctl00 $ ContentPlaceHolder1 $ TextBox&#39;

原来我引用了错误的控件。修复解决了我的问题。 其余代码完全可用。

在jQuery函数中需要在ID调用中使用引用控件,但不是普通的Javascript。 <%= TextBox.ClientID %>甚至可以用于将runat属性设置为server的HTML输入。这将在使用母版页时提供正确的ID。

2 个答案:

答案 0 :(得分:0)

您明确将输入的ID设置为“TextBox”,但您尝试将其检索为<%= TextBox.ClientID %>,使用“TextBox”作为ID(更好的是,为ID提供更有意义的名称)。< / p>

ClientId用于ASP .net控件,它的ID由ASP运行时自动生成。

答案 1 :(得分:-1)

原来我引用了错误的控件。在脚本中引用正确的控件解决了我的问题。其余代码完全可用。

jQuery函数需要在ID调用中引用带#的控件,但不是普通的Javascript。 <%= TextBox.ClientID %>甚至可以用于将runat属性设置为server的HTML输入。这将在使用母版页时提供正确的ID。