質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

816閲覧

getElementByIdについて

mimi77

総合スコア27

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2022/08/10 01:55

編集2022/08/10 02:20

環境
OS windows10
Visual Studio2019
.NET Framework 4.8

ASP.NETでWeb Formsを作成しています。
javasciptを使用し、テキストボックスに変化があれば、ドロップダウンリストを
非活性にするという処理を作りたいです。

下記のような記述をしているのですが、obj の値が null で帰ってきてしまいます。

<asp:DropDownList ID="ListboxSelect" AutoPostBack="true" OnSelectedIndexChanged ="ListboxSelect" runat="server"/> <script type="text/javascript"> function change() { var obj = document.getElementById("ListboxSelect"); alert(obj); obj.Enabled = false; } </script> <asp:TextBox ID="txt" runat="server" test="テスト" OnChange="change();" />

いろいろ調べたのですが、ページを読み込む前にJSを実行するとこのような現象が起きるらしいのですが、JSの発生タイミングは
ページ読み込み → テキストボックスが表示 → テキストボックスの値が変更 → JS実行 となっているので、読み込むタイミング自体は問題ないかと思います。
https://qiita.com/kikuchiTakuya/items/c56c4b25e8b4d005dd8a

また、根本的な質問なのですが、ASP.NETで、画面上のドロップダウンリストをJSで非活性にできるのでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/08/10 02:08

.NET Framework のバージョンを質問欄を編集して追記願います。
m.ts10806

2022/08/10 02:15

念のため、ブラウザに表示された際のHTMLソースも提示してください。
mimi77

2022/08/10 02:20

ご回答ありがとうございます。 情報を追加しました。
guest

回答2

0

ベストアンサー

(1) document.getElementById("ListboxSelect") で取得できない理由

例えばマスターページなどの名前付きコンテナにサーバーコントロールが配置されると、html に変換された時の id とサーバーコントロールの ID は異なってきます。

例えば、質問者さんのコードの <asp:DropDownList ID="ListboxSelect" ...> がマスターページに配置されているとすると、それが html に変換されると .NET Framework 4.8 のデフォルトでは以下のようになります。マスターページの ContentPlaceHolder の ID が先頭に追加されています。

<select name="ctl00$MainContent$ListboxSelect" id="MainContent_ListboxSelect">

ASP.NET 4.0 以降では Control.ClientIDMode プロパティによってそれをコントロールできます。

Control.ClientIDMode プロパティ
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.ui.control.clientidmode?view=netframework-4.8

例えば、<asp:DropDownList ID="ListboxSelect" ...> に ClientIDMode="Static" を追加すれば html に変換されたときの id は ID と同じ ListboxSelect になるので getElementById("ListboxSelect") で取得できます。

他には Matsumon0104 さんの回答にあるように <%= %> を使用する方法があります。これは ASP.NET プログラムから情報を最も簡単に表示するためのもので、<%= と %> 間に設定した ASP.NET プログラムの値がその部分の html ソースに埋め込まれます。

例えば、上のような ClientIDMode は設定しない場合、質問者さんのコードの例で document.getElementById("<%=ListboxSelect.ClientID%>") と変更すれば、それが html ソースに変換されると、

document.getElementById("MainContent_ListboxSelect")

となるので目的の要素を取得できます。

(2) obj.Enabled = false; が動かない理由

サーバーコントロールではないのだから obj.Enabled = false; というのは無しです。以下のようにしてみてください。

obj.disabled = true;

投稿2022/08/10 03:22

編集2022/08/10 03:43
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimi77

2022/08/10 04:07

ご回答ありがとうございます。 無事処理が動きました。 obj.disabled = true; でないと非活性にならないのですね。勉強になりました。 Matsumon0104さんも回答ありがとうございました。 かなり困っていたので本当に助かりました。
guest

0

javascriptで利用するIDは「サーバーコントロールのプログラムID」ではなく、「HTML マークアップのコントロール ID」です。

DropDownList

asp

1var obj = document.getElementById("<%=コントロール名.ClientID%>");

【ASP.NET】JavaScript側でコントロールのIDを取得する方法

投稿2022/08/10 02:25

Matsumon0104

総合スコア1005

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimi77

2022/08/10 02:49

ご回答ありがとうございます。 var obj = document.getElementById("<%=ListboxSelect.ClientID%>").value; alert(obj); obj.Enabled = false; と記載したところ、アラートには 0 が表示されました。 ドロップダウンリストの最初のValue値が 0 なためそちらが表示されている状態です。 試しにラジオボタンで試したところ、コントロールID名がアラートに表示されたのですが、非活性の処理が動作しませんでした。指定方法等が間違っているのでしょうか。 var obj1 = document.getElementById("<%=RadioButton.ClientID%>").value; alert(obj1); obj1.Enabled = false;
Matsumon0104

2022/08/10 04:05

valueのプロパティを設定しようとしているからです。 obj1の中身は下記 document.getElementById("<%=RadioButton.ClientID%>").value HTMLElementに対して処理をしなくてはいけません。 下記まででHTMLElementが取得されています。 document.getElementById("<%=RadioButton.ClientID%>") また、jsの場合で非活性にする場合は「disabled」です。 ですので、非活性にする場合は document.getElementById("<%=RadioButton.ClientID%>").disabled = true
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問