web-dev-qa-db-ja.com

ASP.NETコントロールのJavaScriptgetElementByIdはnullを返しますか?

JavaScriptを使用していますが、実行中にこのエラーが表示されます。

Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object

これは私のコードです:

<asp:Content ID="content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<script language="javascript" type="text/javascript">
    function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById("btnAlelrt").click();

        }       
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="uxContainer" runat="server">
    <ContentTemplate>
 <table> 
<tr>
        <td>
        <asp:Button ID="uxTransfer" runat="server" Text="Transfer" OnClick="uxTransfer_Click" /> 
        <asp:Button ID="btnAlelrt" runat="server" Text="GetDetails" OnClick="btnAlelrt_Click" />       
        </td>
        </tr>
</table>
    </ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="uxTransfer" />    
    </Triggers>
    </asp:UpdatePanel>

 </asp:Content>
12
Wafaa

この:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById("btnAlelrt").click();

        }       

これである必要があります:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById('<%=btnAlert.ClientID%>').click();

        }     

問題は、ボタンがASP.Netコントロールであり、指定したIDとは異なる独自のクライアントIDを生成することです。コードを入れる<%=btnAlert.ClientID%>生成されたものをブラウザに投稿します。

25
kemiller2002

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

document.getElementById('<%= btnAlelrt.ClientID %>').click()

ASP.NET 4.0以降では、要素に ClientIDMode プロパティを使用できます。そして、それをStaticに設定すると、ClientIDの値はIDプロパティの値に設定されます。

<asp:Label ID="Label1" runat="server" ClientIDMode="Static" />

次のようにレンダリングされます。

<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" />
6
algreat

Asp:Buttonに指定するIDは、ASP.Netによってサーバーで使用されるIDです。クライアントスクリプトで使用されるのはIDではありません。

次を使用する必要があります。

document.getElementById("<%= btnAlelrt.ClientID %>").click();
3
GvS

生成されたページでソースを表示すると、ボタンのIDが「btnAlelrt」ではなくなっていることがわかります。 「ctl001_btnAlert」のようなもの、またはその他の生成された一意性識別子が含まれている可能性があります。

これが、JavaScriptがそれを見つけられない理由です。

タグで検索し、IDがbtnAlelrtで終わるかどうかを確認するか、変更されないIDでDIVまたはSPANをその周りに配置する必要があります(つまり、 runat = "server")。次に、そのIDでその要素を見つけて、その中にボタンを表示します。

可能であれば、<%= btnAlelrt.ClientID%>構文を使用して、JavaScriptに適切なIDを挿入できます。

(補足:これはbtnAlertであるはずでしたか?)

3
Jay S

レンダリングされたページを見ると、btnAlelrtというコントロールにはその名前がありません...

「<%=」を追加すると、コントロールのC#名にアクセスできるようになり、機能するはずです。

1
Joe Ratzer

現時点で投稿できるコードサンプルは見つかりませんが、問題について説明することはできます。

ASP.NETは、ページに書き込むときにオブジェクト/ element /ボタンに指定したIDを使用せず、代わりにオブジェクトにクライアントIDを指定します。

コードでMsgbox(btnAlelrt.clientID)を実行すると、JavaScriptで使用するオブジェクト名が表示されます。

これらの値は定数ではないため、.NETコードでJavaScriptでページに書き出すことをお勧めします。

お役に立てれば。

ジェームズ

1
FearMediocrity

clientIDMode = "Static"を使用してみてください。これは実行時にボタンIDを変更しません。

  <asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive"
            CausesValidation="True" OnClientClick="validate();" OnClick="SendMessageButton_Click" />

次に、以下のjqueryを使用してボタンにアクセスできます。これがお役に立てば幸いです。

 var element = document.getElementById('SendMessageButton');
1
Satpal Singh