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。
答案 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。