2012-02-14 6 views
3

これは非常に一般的な問題です。私はjavascriptを介してページ上の特定のボタンをクリックするための "enter key"イベントを取得しようとしていました。しかし、私の人生のために私のasp.netページからIDまたは名前で単一の要素をフェッチすることはできません。Javascript ASP.NETでGetElementByIdを使用できないC#

この問題は、javascriptの場所と、javascriptがロードされたときに要素がレンダリングされたのか、それとも何かの性質のものに関係していると私は理解していますか?

私が使用しようとするたびにvar x = document.getElementById('btn_AddAdmin')私はnull値で終わります。

私のasp.netページには、それが継承するSiteMasterページがあります。私は私のasp.netページとSiteMasterページのトリミングダウンバージョンを含めました。

ASP.NETページ:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" 
    AutoEventWireup="true" CodeBehind="Admin.aspx.cs" Inherits="HERMES.Admin" %> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<input type="text" id="txt_AddAdmin" runat="server" onkeypress="Populate()" /> 

マスターページ:フォーマットのため申し訳ありません

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" 
     Inherits="HERMES.SiteMaster" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head runat="server"> 
    <title></title> 
    <link href="./Styles/Site.css" rel="stylesheet" type="text/css" /> 
    <asp:ContentPlaceHolder ID="HeadContent" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <form runat="server"> 
</form> 
</body> 

、私は何か間違ったことをやっているように見える...

私は置くことを試みてきました多くの異なる場所でjavascript - sitemasterのページから私のasp.netページの上部と下部まで。いずれにせよ運がない。

+2

最初の質問に答えるには、はい、document.getElementByIdの位置が重要です。 id "btn_AddAdmin"を持つ要素がWebブラウザによってレンダリングされた後、またはdomが準備されていることがわかったら、これを呼び出す必要があります。あなたの質問からあなたのJavaScriptをどこに含めるかは明確ではありません。私が見ることができるのは、idがtxt_AddAdminの入力にテキストが入力されたときに、関数 "Populate()"が呼び出されるということだけです。レンダリングされたhtmlページのソースコードをここに投稿することをお勧めします。おそらくhttp://jsfiddle.net/を使って作業を簡単にすることができます。 –

+0

私はコメントの最後の行ごとにJavaScriptコードをその場所全体に再配置しようとしましたが、それは関係なく動作していませんでした。しかし、@ Xanderは問題が何であったかをカバーしています。しかし、提案をありがとう! – ImGreg

答えて

6
var x = document.getElementById('<%= btn_AddAdmin.ClientID %>'); 

あなたのボタンは、それがpostback中に戻って適切なサーバーコントロールにバインドすることができますので、それはinputボタンに名前付けスキームを付加Server Controlある場合。したがって、レンダリングされたIDを取得するために、ClientIDプロパティを使用する必要があります。ビングと

Googleのそれ::

は、より多くの訪問を学ぶために

  • のClientIDを
  • ASPNET Webフォームのクライアントサイドのプログラミング
+0

実際に働いたうわー。なぜこのアプローチはうまくいくのですか? – ImGreg

+2

@ImGreg - サーバー側のコントロール( 'runat =" server "属性を持つもの)の' id'属性は、コントロールの_server side_IDを意味し、C#のコードで使用されます。そのようなコントロールのための 'ClientId'プロパティは、javascriptが消費するためにブラウザに表示されるように、発行された' id'です。 – Oded

+0

Gottcha。それは理にかなっている。しかし、このことがどのように機能するかをよりよく理解するためには、これをさらに詳しく読む必要があります。関連する測定値のためのリンクはありますか?ありがとう、もう一度btw。 – ImGreg

関連する問題