9

誰もがこれを行っているようです (コード投稿などで)...しかし、方法がわかりません。:(

JavaScript を使用して asp 要素を操作しようとすると、常に"element is null"or "document is undefined"etc. エラーが発生します.....

JavaScript は通常は正常に動作しますが、属性を追加した場合にのみrunat="server"、要素が JavaScript から見えないように見えます。

任意の提案をいただければ幸いです。

ありがとう、アンドリュー

4

4 に答える 4

27

おそらく発生しているのは、要素/コントロールが名前付けコンテナー (マスター ページ、ITemplate、ウィザードなど) として機能する 1 つ以上の ASP.NET コントロール内にあり、その ID が変更されていることです。

ブラウザで「ソースを表示」を使用して、レンダリングされた HTML で何が起こっているかを確認できます。

JavaScript が ASPX ページにある場合、一時的に回避する最も簡単な方法は、要素の ClientID プロパティを使用することです。たとえば、JS 経由で参照したい TextBox1 という名前のコントロールがあるとします。

var textbox = document.getElementById('<%= TextBox1.ClientID %>');
于 2009-03-23T20:24:20.337 に答える
3

要素を作成するrunat="server"と、その要素が含まれている ASP.NET ネーミング コンテナーに基づいて、その要素のクライアント側 ID が変更されます。したがってdocument.getElementById、要素を操作するために を使用している場合は、.NET によって生成された新しい ID を渡す必要があります。ClientIdプロパティを調べて、生成された ID を取得します...次のように Javascript でインラインで使用できます。

var element = document.getElementById('<%=myControl.ClientID%>');
于 2009-03-23T20:24:55.687 に答える
2

テキストボックスがある場合:

<asp:TextBox id="txtText" runat="server" />

あなたは使用することができます:

var textBox=document.getElementById('<%=txtText.ClientID %>');

どの WebControl も同じ ClientID プロパティを公開します。

于 2009-03-23T20:23:35.393 に答える
1

質問にはすべて回答しましたが、さらに情報を投稿すると思いました...

Rick Strahl は、この問題に対する非常に興味深い回避策を提供しました。

http://www.west-wind.com/WebLog/posts/252178.aspx

ありがたいことに、ASP .NET 4.0 が登場すると、クライアント ID を正確に指定できるようになります。

http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx

于 2009-03-23T22:37:04.043 に答える