2009-07-13 16 views
11

私はJavaScriptを使用して、このエラーは、実行時に私のために表示されます。ASP.NETコントロールのJavaScript getElementByIdはnullを返しますか?

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> 

答えて

24

をこの:

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

     }  

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

     }  

は、このする必要があります

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

+1

神は、私の周り – Triptych

1

あなたがレンダリングされたページを見ればbtnAlelrtと呼ばれる制御は、もはやその名前を持っている...

あなたが追加した場合、「<%は=」あなたがコントロールのC#の名前にアクセスすることができ、そしてそれうまくいくはずです。

3

IDあなたはASPを与えます。ボタンはASP.Netで、サーバー上で使用されるIDです。クライアントスクリプトで使用されるIDではありません。

あなたは使用する必要があります:あなたが生成されたページ上のソースを表示した場合、あなたはおそらくボタンは、もはやID「btnAlelrt」を持っていることがわかりません

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

。それは "ctl001_btnAlert"のような何らかの他の生成された一意性識別子を持っているかもしれません。あなたのjavascriptがそれを見つけていない理由

です。

タグで検索し、IDがbtnAlelrtで終わるかどうかを確認する必要があります。そうしないと、変更されないIDでDIVまたはSPANを配置する必要があります。 runat = "server"はありません)。その要素をそのIDで見つけて、そこのボタンを取得することができます。

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

:私はこの瞬間にあなたのためにポストするコードサンプルを見つけることができません

1

(追記は?このbtnAlertになるはずだった)が、私はあなたが持つ問題点を説明することができます。

ASP.NETではなく、それがオブジェクトにクライアントのIDを与え、それがページに書き込むときに、オブジェクト/要素/ボタンを与えるIDを使用していません。あなたのコードでのMsgBox(btnAlelrt.clientID)を行う場合

することは、あなたがあなたのJavascriptを使用する必要があるオブジェクトの名前が表示されます。

.NETコードでは、定数ではないため、JavaScriptのこれらの値をページに書き込むほうがよいでしょう。

これが役に立ちます。

ジェームズ

+0

良いアプローチを嫌いありがとう、のClientIDMode =「静的」私はJavaScriptでdiv要素を取得することができませんでしたので、私の問題を保存します。 – ashubuntu

5

あなたは、この使用することができます:あなたはあなたの要素のClientIDModeプロパティを使用することができますASP.NET 4.0から始まっ

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

を。あなたはStaticにそれを設定した場合、その後ClientID値は、IDプロパティの値に設定されます。

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

はこのようなものとしてレンダリングされます。

<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" /> 
+0

を微調整するasp.net – davidlebr1

0

はのClientIDMode = "静的を使用してみてください"これは、実行時に変更ボタン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'); 
関連する問題