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

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

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

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

ASP.NET

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

Q&A

1回答

4116閲覧

JavascriptのgetElementByIdについて

cutedog

総合スコア177

JavaScript

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

ASP.NET

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

1グッド

1クリップ

投稿2020/01/22 07:25

編集2020/01/25 02:51

お世話になっております。

以下のように文字列を記述すると下記の太文字部分がエラーになってしまいます。
HTMLとなったときのIDは⇒id="MainContent_FpDirectList_ctl05_Input"です。
MainContent_FpDirectListがgrid.idで05部分がrowとcolになり動的生成します。
document.getElementById('<%= grid.id + "_ctl" + **row **+ **col **+ "_Input" %>')

JavaScript

1var grid = document.getElementById('<%=this.Grid.ClientID%>') 2var tx = document.getElementById('<%= grid.id + "_ctl" + row + col + "_Input" %>'); 3var r = tx.createTextRange(); 4alert(r.text); 5

**

新規WEBサイトで作成したものに、「GcTextBox1」changeイベントを追加しました。
「<% %>」付きのものは動作しますが、無いものは動作しません。
あらかじめテキストやラベルにセットした値はブラウザ表示したときは正しく入っています。
ブラウザ表示した後に、テキストに何か値を書き入れてフォーカスを抜けると
ダイアログが
表示されます --> alert("aa=" + FindIMControl('<% =this.GcTextBox1.ClientID %>').GetValue());

表示されます --> var lbl = document.getElementById('<%=this.Label1.ClientID%>');
alert("ラベル1" + lbl.innerHTML);

表示されない --> var lbl2 = document.getElementById(this.Label1.ClientID);
alert("ラベル1" + lbl2.innerHTML);

以上のような結果になります。

サンプルといいながら、実際にはmasterページとか他設定ファイルなどがあります。
このサンプルは、新規WEBページのプロジェクト作成してから
適当なラベル追加して
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">内に
javascriptを書いているだけです。ボタンイベントで書いてもよかったように思います。
サンプルにはテキストがあるのは、私が簡単にJavascriptのイベントを起こすのに書いているだけです。
ラベルだけでも再現できるかと思います。

**

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register assembly="GrapeCity.Web.Input.v100, Version=10.0.4005.2012, Culture=neutral, PublicKeyToken=c3bd7c1dccef5128" namespace="GrapeCity.Web.Input.IMEdit" tagprefix="im_edit" %> <%@ Register assembly="GrapeCity.Web.Input.v100, Version=10.0.4005.2012, Culture=neutral, PublicKeyToken=c3bd7c1dccef5128" namespace="GrapeCity.Web.Input.IMExtenders" tagprefix="im_extenders" %> <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server"> <script type="text/javascript"> function change() { alert("aa=" + FindIMControl('<% =this.GcTextBox1.ClientID %>').GetValue()); var lbl = document.getElementById('<%=this.Label1.ClientID%>'); alert("ラベル1" + lbl.innerHTML); var lbl2 = document.getElementById(this.Label1.ClientID); alert("ラベル1" + lbl2.innerHTML); } </script> <div class="jumbotron"> <h1>ASP.NET</h1> <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS, and JavaScript.</p> <p><a href="http://www.asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p> <im_edit:GcTextBox ID="GcTextBox1" runat="server" HasLoadFromXml="True" Text="MAAA"> <clientevents textchanged="change"> </clientevents> </im_edit:GcTextBox> <p> <im_extenders:GcShortcut ID="GcShortcut1" runat="server"> <shortcutitem controlid = "GcTextBox1" value = "Clear,113,DropDown,118"/> </im_extenders:GcShortcut> </p> <asp:Label ID="Label1" runat="server" Text="らべる"></asp:Label> </div> <div class="row"> <div class="col-md-4"> <h2>Getting started</h2> <p> ASP.NET Web Forms lets you build dynamic websites using a familiar drag-and-drop, event-driven model. A design surface and hundreds of controls and components let you rapidly build sophisticated, powerful UI-driven sites with data access. </p> <p> <a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301948">Learn more &raquo;</a> </p> </div> <div class="col-md-4"> <h2>Get more libraries</h2> <p> NuGet is a free Visual Studio extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects. </p> <p> <a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301949">Learn more &raquo;</a> </p> </div> <div class="col-md-4"> <h2>Web Hosting</h2> <p> You can easily find a web hosting company that offers the right mix of features and price for your applications. </p> <p> <a class="btn btn-default" href="http://go.microsoft.com/fwlink/?LinkId=301950">Learn more &raquo;</a> </p> </div> </div> </asp:Content>

以上、宜しくお願い致します。

DrqYuto👍を押しています

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

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

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

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

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

maisumakun

2020/01/22 07:26

どのようなエラーが出ていますか?
cutedog

2020/01/22 07:37

ありがとうございます。 ブラウザには以下のようなエラーが発生しています。 アプリケーションでサーバー エラーが発生しました。 コンパイル エラー 説明: この要求を送信するために必要なリソースをコンパイル中に、エラーが発生しました。以下のエラーの詳細を確認して、ソース コードを修正してください。 コンパイル エラー メッセージ: CS0103: 名前 'grid' は現在のコンテキスト内に存在しません。 ソースコードでは  「grid」「row」「 col 」の下に波線(エラーを示唆?)が入っています。 以上、宜しくお願い致します。
quzq

2020/01/22 07:39

document.getElementById(this.Grid.ClientID)だとエラーは出ないですか?
退会済みユーザー

退会済みユーザー

2020/01/22 07:46

開発環境を書いてください。特に Visual Studio を使っていれば(使ってますよね?)そのバージョン・エディション。 コードは部分的なものでなく、少なくとも JavaScript のコードの中にある問題の this.Grid.ClientID と ctlname との関係が分かる .aspx, .aspx.cs のコードもアップしてください。
cutedog

2020/01/22 07:55

document.getElementById(this.Grid.ClientID)だとエラーはでません。 値取得には「'<%= %>」を付けないと値は帰ってきません。
cutedog

2020/01/22 08:02

VisualStudio2015 Proffesionalです。 aspx, .aspx.cs はコントロールをGrapeCityのInputman,SPREADを使用しているので 参考にならないと思います。
m.ts10806

2020/01/22 08:04

ブラウザに表示させたときにきちんと意図通りの値が入ってるんでしょうか。
cutedog

2020/01/22 08:10

SPREADセルのKeyUpイベント時に処理を書いています。 値はセルに一文字入力するたびにこの処理が走り最後のalertで値を表示させています。
cutedog

2020/01/22 08:24

質問内容が伝わりにくかったので、書き直しました。
退会済みユーザー

退会済みユーザー

2020/01/22 23:47 編集

> VisualStudio2015 Proffesionalです。 質問欄を編集して追記してください。コメント欄は初期画面では開かないので読まない人がいますから。 また、エラーメッセージも重要な情報なので、質問欄を編集して追記してください。 > aspx, .aspx.cs はコントロールをGrapeCityのInputman,SPREADを使用しているので参考にならないと思います。 では、少なくとも this.Grid.ClientID とかのサーバーコントロールに関係する変数、プロパティなど JavaScript のコードのに埋まっているものが何だか分かるように書いてください。これも質問欄を編集して追記してください。それができないなら、GrapeCity を使わないサンプルコードを作ってアップして説明してください。
退会済みユーザー

退会済みユーザー

2020/01/23 11:46

スルーしているのは、お前のレスなど不要という意思表示なのかな?
cutedog

2020/01/24 09:32

複数案件掛け持ちしてるのでレスはおそくなります。
cutedog

2020/01/24 09:36

文字数制限で上げられないので、JavaScriptの一部分を上げました。
退会済みユーザー

退会済みユーザー

2020/01/24 09:44

ちょっと待って欲しいの一言ぐらいは書けるよね? 忙しいとかいう言い訳はあなたの勝手な都合でしかない。
cutedog

2020/01/24 10:13

サンプルあげました。 単純に新規WEBサイトを作成してGrapecityのInputmanのテキストにchangeイベントを追加したものです。
退会済みユーザー

退会済みユーザー

2020/01/24 11:56

私は撤退します。他の人の回答をお待ちください。
cutedog

2020/01/25 00:33

そうですか。わかりました。 だけど、1日空いた程度でレスが遅いのは私の勝手な都合というなら、早くレスを出せというのもあなたの勝手な都合ですよね。「スルーしているのは、お前のレスなど不要という意思表示なのかな?」っていうのも不快な発言ですよね。こういうレスはやめた方がいいですよ。
m.ts10806

2020/01/25 00:36 編集

(2回目)ブラウザに表示させたときにきちんと意図通りの値が入ってるんでしょうか。 →ブラウザの「ソースを表示」で確認してください。動的であれば本当に意図した値が入っているかどうか他者には現在のコードでは確認不可能なので、自身で確認してもらうしかありません
退会済みユーザー

退会済みユーザー

2020/01/25 00:57

ゆとり世代なのかな? レスが遅いというのは、例えて言うなら、あなたが自分の課題を解決するために、赤の他人のボランティアを集めて課題解決のための会議を開催して、参加者からこういう情報を出してくれと言われたのに、あなたは黙って席を立ってどこかへ行ってしまったようなことだと言ったら分かるかな? 普通は席を立つ前に、中座させてほしいと会議の参加者に言うよね? あなたの常識では違う?
cutedog

2020/01/25 01:52

SurferOnWwwへ。 ゆとり世代ではないですよ。 暴力的で漢字のハネひとつ書き順ひとつ間違うと×で廊下に立たされる時代の人間です。 もしかしたらあなたの方が若い世代なのかもしれませんね。 しかし、ゆとりとかそういうのは関係ないと思いますよ。 あなたが言っていることは少しずれた考え方だと思いますね。 あなたが言っているのは現実世界のお話で、この質問版では その人たちを実際にずっと拘束しているわけでもないですよね? わたしは、この質問版で回答くださる方は、私も含め、少し時間ができたとかで ちょっと、他の人に役に立てるかなと思って回答くださると思っています。 1日2日程度の空きなど仕方のない世界だと思ってます。 ただ、たしかに遅いレスのやり取りは回答者の興味や回答時間が失せる可能性もあるので できるだけ、早いレスが好ましいとは思いますが。 しかし、あなたは違うのですね。 もしかして、ずっと画面見ながらレスまってくださっていたんですか? いつ来るかわからないレスをジッと待つという感覚は私にはないもので そういう方であるなら謝罪しますよ。 ただ、前レスにもかきましたが、上から目線の教えてやっているんだ的な 煽り文句のような書き方は極めて不快なのでやめた方がいいですよ。 あまりこういうレスのやり取りは荒らしになるので これで終わりにしましょう。
m.ts10806

2020/01/25 01:56

(3回目)ブラウザに表示させたときにきちんと意図通りの値が入ってるんでしょうか。 →ブラウザの「ソースを表示」で確認してください。動的であれば本当に意図した値が入っているかどうか他者には現在のコードでは確認不可能なので、自身で確認してもらうしかありません
cutedog

2020/01/25 02:08

m.ts10806さん。 回答ありがとうございます。 ちょくちょくサンプル変えてしまったので申し訳ないですが、現状掲載しているサンプルは サンプルといいながら、実際にはmasterページとか他設定ファイルなどがあります。 このサンプルは、新規WEBページのプロジェクト作成してから 適当なラベル追加して <asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">内に javascriptを書いているだけです。ボタンイベントで書いてもよかったように思います。 サンプルにはテキストがあるのは、私が簡単にJavascriptのイベントを起こすのに書いているだけです。 ラベルだけでも再現できるかと思います。 最終的に、書き込んだサンプルソースでは あらかじめテキストやラベルにセットした値はブラウザ表示したときは正しく入っています。 ブラウザ表示した後に、テキストに何か値を書き入れてフォーカスを抜けると ダイアログが 表示されます --> alert("aa=" + FindIMControl('<% =this.GcTextBox1.ClientID %>').GetValue()); 表示されます --> var lbl = document.getElementById('<%=this.Label1.ClientID%>'); alert("ラベル1" + lbl.innerHTML); 表示されない --> var lbl2 = document.getElementById(this.Label1.ClientID); alert("ラベル1" + lbl2.innerHTML); 以上のような結果になります。
m.ts10806

2020/01/25 02:10

私は2回ほど 「ブラウザに表示させたときにきちんと意図通りの値が入ってるのか、ブラウザの「ソースを表示」で確認してください」と書いてます。 いずれにしても結果は質問本文に追記してください。
退会済みユーザー

退会済みユーザー

2020/01/25 02:17

ゆとり世代ではない? それは失礼。 何にせよ、あなたは自分さえよければいい、他人の言うことなど聞こえない方だと理解しました。今後関わらないようにしますので、ハンドル名を変えないようお願いします。
cutedog

2020/01/25 02:42

すいません。結果は本文に記載しました。 >ブラウザに表示させたときにきちんと意図通りの値が入ってるのか、ブラウザの「ソースを表示」で確認してください ブラウザ表示させたときは、あらかじめセットしている値で表示されています。 ブラウザのソースを表示で確認してもテキストとラベルにはそれぞれにあらかじめ固定でセットした値が入っています。
m.ts10806

2020/01/25 02:54

SurferOnWwwさん 盛り上がっているところ水を差すようで申し訳ないですが、必要以上に煽り過ぎな気がします。
guest

回答1

0

document.getElementById()は、htmlタグのidから要素を取得するメソッドです。
asp.netがGridコントロールをレンダーするときに、クライアント向けのjavascriptソース内で、そのGridのhtmlタグのidをthis.Grid.ClientIDにセットしてくれています。
なので、この場合、document.getElementById(this.Grid.ClientID)と書く必要があります。

投稿2020/01/22 08:13

quzq

総合スコア185

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

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

cutedog

2020/01/22 08:41

回答ありがとうございます。 そうなんですよ。ふつうはご指摘のような記載方法でいいと思います。 簡単なサンプル作ってみたのですが、 「grid.id + "_ctl" + row + col + "_Input"」だけで値の取得はできています。 なのですが、 実際の環境だと document.getElementById('<%=this.Grid.ClientID%>')も同様ですが 何故かわかりませんが「'<%=%>'」を記述しないと値を取得できないのです。 「'<%=%>'」を付けて document.getElementById('<%= grid.id + "_ctl" + row + col + "_Input" %>');で 「'<%=%>'」を記述すると「grid.id 」「row」「col 」が 「現在のコンテキストに??という名前はありません」というエラーになります。 実際動かすとサーバエラーとなってしまうのです。 「'<%=%>'」が必要ってどういうときなのかもわからないのですが 「'<%=%>'」を付けてエラーにならない書き方もわからないので どうにもならなくて困っています。
退会済みユーザー

退会済みユーザー

2020/01/22 09:10 編集

> document.getElementById(this.Grid.ClientID)と書く必要があります。 それ間違っていると思います。そもそも this.Grid.ClientID とは何だか分かってますか? 自分も質問者さんが書かないから分かりませんが、サーバー側の何か(クライアント側にそのように書けるものではない)には間違いなさそうですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問