次のようなJavaScript関数を呼び出しているASP.Netページがあります。
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value)" Text ="GO!" />
しかし、[GO]ボタンをクリックすると、次のエラーが発生します。
JavaScriptランタイムエラー:未定義またはnull参照のプロパティ '値'を取得できません
ボタンのレンダリングされたコードを表示する場合:
<input type="submit" name="btn_view" value="GO!" onclick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value);" id="btn_view" />
適切なClientIDを入れていません。テストボックスのCLientIDModeをstaticに設定しようとしましたが、役に立ちませんでした。
この質問はこれに似ています 未回答の質問 。
この問題にはいくつかの解決策があります。
ASP.NETコントロールのOnClientClick属性内のtxt_name.ClientIDを評価しようとすると、コントロール内でのみ問題が発生するため、より簡単な方法の1つは名前をJavaScript変数に移動することです。
<script>
var txtName = '<%= txt_name.ClientID %>';
</script>
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click"
OnClientClick="return AlertOnGo('View Configuration',
document.getElementById(txtName).value)" Text ="GO!" />
asp:textboxタグ内でプロパティ_ClientIDMode="Static"
_を使用できます
このような
_<asp:TextBox ClientIDMode="Static" ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click"
OnClientClick="return AlertOnGo('View Configuration',
document.getElementById(txtName).value)" Text ="GO!" />
_
このように、テキストボックスのクライアントIDは「id」と同じになり、document.getElementById('txt_name').value
を使用できます。
そしてそれは私のために働く
別の解決策は、ブラウザに移動して昆虫要素がテキストボックスの動的IDを読み取り、JavaScriptで次のように設定することです。
var ddlFunction = document.getElementById('ctl00_SPWebPartManager1_g_ecede3f6_2b87_405a_af1b_70401bb8d4c7_ddlFunction');
HTML:
<asp:DropDownList ID="ddlFunction" runat="server" CssClass="dropDownClass">
<asp:ListItem Selected="True">Select One</asp:ListItem>
<asp:ListItem>Sample 1</asp:ListItem>
<asp:ListItem>Sample 2</asp:ListItem>
</asp:DropDownList>
Cssクラスを作成し、クライアントIDの代わりにそれを使用できます(jQuery $( '。txt_name')。text()を使用)。
サーバー名を入力してください:
<asp:TextBox ID="txt_name" CssClass="txt_name" runat="server"></asp:TextBox>
私はString.Concatを使用することを好みます。アポストロフィの代わりに\ u0027を使用できます。
OnClientClick='<%#String.Concat("document.getElementById(\u0027", AddToCartBtn.ClientID.ToString(), "\u0027).value = \u0027Adding...\u0027;")%>'
-編集された回答--aspx
<asp:Button ID = "btn_view" runat = "server" OnClick = "View_btn_click" OnClientClick = "javascript:return AlertOnGo( 'View Configuration');"テキスト= "GO!" />
脚本
function AlertOnGo(mode) { var btnId = '<%= txt_name.ClientID%>'; var value = document.getElementById(btnId)。 value; // your code return false; }
Asp.net Webコントロールのプロパティで<%=%>を使用しています-コントロール全体がhtmlに置き換えられるため、機能するとは思われません。
JavaScriptをスクリプトブロックに移動し、イベントハンドラーをすべてインラインにするのではなく、コードに添付します。
Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" Text ="GO!" />
<script>
document.getElementById('<%= btn_view.ClientID %>').attachEvent('click', function() {
return AlertOnGo('View Configuration',
document.getElementById('<%= txt_name.ClientID %>').value);
});
</script>