我只是想在javascript中将标签存储在变量中,但出于某种原因,这不适用于document.getElementById('control');
。我知道我的javascript链接到我的html文件很好,因为其他一切都有效。
这是我的javascript代码:
function performEvapCooledCircuit(txt)
{
var error = document.getElementById('lblError');
if (txt.value == null || isNaN(txt.value))
{
error.style.visibility = "visible";
}
}
以下是我的标签的HTML代码:
<asp:Label ID="lblError" class="NormLabel" runat="server"
style="color:red; visibility:hidden;" Text="Invalid Input."></asp:Label>
我收到的错误是预期对象?
答案 0 :(得分:20)
ASP.NET将生成的ID不会是“lblError”,因此您需要通过ClientID
document.getElementById('<%=lblError.ClientID %>');
如果您的javascript文件是外部的,我通常必须编写一种“Init”javascript方法,以确保我的ID已设置属性
在您的ASPX页面上:
<script type="text/javascript">
var lblError = null;
function InitializeVariables()
{
if (lblError == null) // make sure you only do this once
{
lblError = document.getElementById("<%=lblError.ClientID %>");
}
}
</script>
<asp:Label
ID="lblError"
class="NormLabel"
runat="server"
style="color:red; visibility:hidden;"
Text="Invalid Input."></asp:Label>
然后在你的javascript文件中,你必须调用InitializeVariables()
以确保你有变量指向正确的asp.net控件
function performEvapCooledCircuit(txt)
{
InitializeVariables();
if (txt.value == null || isNaN(txt.value))
{
lblError.style.visibility = "visible";
}
}
答案 1 :(得分:6)
“hunter”提供了一种非常可靠的做事方式,但是在我看来,更好的方法是在控件上使用“CliendIDMode”属性并将该属性设置为“Static”。这将使客户端和服务器ID相同。像这样:
<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" />
答案 2 :(得分:2)
标签的ID不是“lblError”。 ASP.net引擎更改了ID。检查浏览器中的HTML源代码以找出真实ID。
答案 3 :(得分:1)
这不是标签的HTML,这是一个ASP.NET控件,它将在响应中发送之前呈现为HTML。 ASP.NET WebForms控件有时会更改它们创建的HTML的ID。
查看网页的来源,以查看HTML元素在呈现页面上的ID。
答案 4 :(得分:1)
您可以使用:
document.getElementById('<%= lblError.ClientID %>').click()
从ASP.NET 4.0开始,您可以为您的元素使用ClientIDMode属性。如果您将其设置为Static
,则ClientID
值将设置为ID属性的值:
<asp:Label ID="lblError" runat="server" ClientIDMode="Static" />
将呈现如下:
<span id="lblError" name="ctl00$MasterPageBody$ctl00$Label1" />