web-dev-qa-db-ja.com

getElementByIdがASP.netによって生成されたコントロールを見つけられない

私は単に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>

オブジェクトが予期されているというエラーが表示されますか?

15
Johnrad

ASP.NETが生成するIDは「lblError」ではないため、ClientIDで参照する必要があります

_document.getElementById('<%=lblError.ClientID %>');
_

あなたのJavaScriptファイルが外部の場合、私は通常、自分のIDが設定されていることを確認するために、「Init」JavaScriptメソッドのタイプを書かなければなりませんでした

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";
    }
}
_
20
hunter

「ハンター」はかなり堅実な方法を提供しますが、私の意見では、はるかに良い方法は、コントロールで「CliendIDMode」プロパティを使用し、そのプロパティを「静的」に設定することです。これにより、クライアントIDとサーバーIDが同じになります。このような:

<asp:TextBox ID="ServerAndClientId" runat="server" ClientIDMode="Static" />
6
Maverick

ラベルのIDは「lblError」ではありません。 ASP.netエンジンがIDを変更しました。ブラウザでHTMLソースコードを確認して、実際のIDを確認します。

2
Šime Vidas

あなたはこれを使うことができます:

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" />
1
algreat

これはラベルのHTMLではありません。これは、応答で送信される前にHTMLにレンダリングされるASP.NETコントロールです。 ASP.NET WebFormsコントロールは、作成するHTMLのIDを変更することがあります。

Webページのソースを表示して、レンダリングされたページにあるHTML要素のIDを確認します。

1
StuperUser