getElementById没有找到ASP.net生成的控件

时间:2011-01-04 16:17:22

标签: javascript asp.net getelementbyid

我只是想在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>

我收到的错误是预期对象?

5 个答案:

答案 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" />