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>
この:
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%>
生成されたものをブラウザに投稿します。
あなたはこれを使うことができます:
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" />
Asp:Buttonに指定するIDは、ASP.Netによってサーバーで使用されるIDです。クライアントスクリプトで使用されるのはIDではありません。
次を使用する必要があります。
document.getElementById("<%= btnAlelrt.ClientID %>").click();
生成されたページでソースを表示すると、ボタンのIDが「btnAlelrt」ではなくなっていることがわかります。 「ctl001_btnAlert」のようなもの、またはその他の生成された一意性識別子が含まれている可能性があります。
これが、JavaScriptがそれを見つけられない理由です。
タグで検索し、IDがbtnAlelrtで終わるかどうかを確認するか、変更されないIDでDIVまたはSPANをその周りに配置する必要があります(つまり、 runat = "server")。次に、そのIDでその要素を見つけて、その中にボタンを表示します。
可能であれば、<%= btnAlelrt.ClientID%>構文を使用して、JavaScriptに適切なIDを挿入できます。
(補足:これはbtnAlertであるはずでしたか?)
レンダリングされたページを見ると、btnAlelrtというコントロールにはその名前がありません...
「<%=」を追加すると、コントロールのC#名にアクセスできるようになり、機能するはずです。
現時点で投稿できるコードサンプルは見つかりませんが、問題について説明することはできます。
ASP.NETは、ページに書き込むときにオブジェクト/ element /ボタンに指定したIDを使用せず、代わりにオブジェクトにクライアントIDを指定します。
コードでMsgbox(btnAlelrt.clientID)を実行すると、JavaScriptで使用するオブジェクト名が表示されます。
これらの値は定数ではないため、.NETコードでJavaScriptでページに書き出すことをお勧めします。
お役に立てれば。
ジェームズ
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');