🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

5回答

5149閲覧

getElementById()でIDを複数指定したい

minomonnta

総合スコア9

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/11/27 07:34

編集2019/11/28 01:36

要素1をクリックした時に座標1にクリックした時の座標を、要素2をクリックした時に座標2にクリックした時の座標という風にしたい。
要素はドラッグで動かせるようしていてドロップした時の座標が欲しい。
今のやり方では要素1の座標しか取り出せていないので解決方法を教えてください。

html

1//要素1 2<div class="drag-and-drop" id="target" style="top:;left:0;background-color:#f48fb1;">正方形</div> 3//要素2 4<div class="drag-and-drop2" id=target2" style="top:1;left:110px;background-color:#64b5f6;">縦長</div> 5//要素3 6<div class="drag-and-drop3" id="target3" style="top:1;left:220px;background-color:#ffe082;">横長</div> 7//座標1 8document.getElementById("target").addEventListener('click', function(event) { 9 var kimetu = event.pageX ; // 水平の位置座標 10 var yaiba = event.pageY ; // 垂直の位置座標 11 document.getElementsByName('name')[0].value = kimetu + ":" + yaiba; 12}); 13//座標2 14document.getElementById( "target2" ).addEventListener('click', function(event) { 15 var kuroko = event.pageX ; // 水平の位置座標 16 var basuke = event.pageY ; // 垂直の位置座標 17 document.getElementsByName('name2')[1].value = kuroko + ":" + basuke; 18}); 19//座標3 20document.getElementById( "target3" ).addEventListener('click', function(event) { 21 var saikikusuo = event.pageX ; // 水平の位置座標 22 var sainann = event.pageY ; // 垂直の位置座標 23 document.getElementsByName('name3')[2].value = saikikusuo + ":" + sainann; 24}); 25</script> 26 27 28 29 30<form method="post" action="demo.php" > 31 <p> 32 座標1 33 <input type="text" value="クリックしてね☆" name="name"> 34 35 </p> 36 37 38 <p> 39 座標2 40 <input type="text" value="クリックしてね☆" name="name2"> 41 42 </p> 43 <p> 44 座標3 45 <input type="text" value="クリックしてね☆" name="name3"> 46 47 </p> 48 <input type="submit" value="submit"> 49</body> 50</html>

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

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

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

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

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

x_x

2019/11/27 07:38

PHP ではないですよね? 適切なタグをつけてください
shinji709

2019/11/28 01:16

JavaScriptコード中で取得している、idがtargetである要素、jumpである要素が、今現在提示されているHTMLコード中に含まれておりませんので追加してください。どこをクリックする想定のコードなのか分かりません。各input要素のvalueに"クリックしてね☆"と書かれていますが、表示のみならずクリックするのもinput要素なのですか?もしそうでも適切にidを振っていただかないと、日本語による説明も不足しているためやりたいことの意図がつかめません。
shinji709

2019/11/28 01:23

targetは含まれていました。失礼しました。
guest

回答5

0

こんなかんじです

javascript

1 2<script> 3window.addEventListener('DOMContentLoaded', function(e){ 4 document.querySelectorAll('#a,#b').forEach(x=>{ 5 x.addEventListener('click',()=>{ 6 console.log(x.textContent); 7 }); 8 }); 9}); 10</script> 11<div id="a">A</div> 12<div id="b">B</div> 13<div id="c">C</div> <!--反応しない--> 14

投稿2019/11/27 07:38

yambejp

総合スコア116694

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

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

minomonnta

2019/11/28 00:43

回答ありがとうございます、ちょっとよく分からなかったのでもう少し詳しく教えていただいてもよろしいでしょうか
yambejp

2019/11/28 00:46 編集

なにかを指定してHTML要素を掴むにはgetElementById()よりquerySelectorもしくは querySelectorAllが楽だということです。 特に複数を掴むのであればquerySelectorAllがマストでしょう 掴んだ後はforEachでそれぞれのHTML要素に対して処理を入れればよいです
guest

0

HTML ではどのエレメントにも id 属性を付与することができますが、条件として
** 一つの HTML 要素ツリー内では、id属性の値は重複しない **
ことが要求されています。
※id属性が指定されていないエレメントについては無視してよい

なので、id属性を指定するということは、イコール高々一つのエレメントを指定する、ことに他なりません。
なので getElementByID と、単数形なのです。

複数のエレメントに対して同じ処理をしたいのなら、getElementByID ではなく、getElementsByClassName() とか、querySelector() を使う方がよいのです。

投稿2019/11/28 01:03

tacsheaven

総合スコア13703

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

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

AkitoshiManabe

2019/11/28 10:40

文脈から typo と解釈しました。querySelector() -> querySelectorAll()
guest

0

HTML

1<script> 2window.addEventListener('load', e =>{ 3 function handleDragStart(e) { 4 this.textContent='Drag: (' + String(e.pageX) + ',' + String(e.pageY) + ')' 5 } 6 function handleDragOver(e) { 7 if (e.preventDefault) { 8 e.preventDefault(); 9 } 10 e.dataTransfer.dropEffect = 'move'; 11 return false; 12 } 13 function handleDrop(e) { 14 this.textContent='Drop: (' + String(e.pageX) + ',' + String(e.pageY) + ')' 15 } 16 document.querySelectorAll('.column').forEach(col => { 17 col.setAttribute('draggable', 'true'); 18 col.addEventListener('dragstart', handleDragStart, false); 19 col.addEventListener('dragover', handleDragOver, false); 20 col.addEventListener('drop', handleDrop, false); 21 }); 22}); 23</script> 24<style> 25.column { 26 height: 50px; 27 width: 150px; 28 border: solid; 29 text-align: center; 30} 31</style> 32<div class="column"></div> 33<div class="column"></div> 34<div class="column"></div>

投稿2019/11/28 04:39

編集2019/11/28 05:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

方法論としては色々あります。

  • getElementById() ... 一つを取得するものなので複数回実行するか、バブリングを利用する(shinji709さんの手法)
  • getElementsByName() ... 複数を取得するもので。フォーム内に重複しない場合は [0] です。

[1], [2] とする事例は input[type=checkbox]input[type=radio] のような時ですね。

他の方も回答していますが、querySelector() や querySelectorAll() は、セレクタを意識できます。

getElementById()でIDを複数指定したい

複数指定での動くサンプル です。イベント対象要素の id リストを配列化してイベント定義してみました。

お手元のコードの div#target2 は再確認してくださいね。(id=target2"ダブルクォート忘れ)

投稿2019/11/28 10:28

AkitoshiManabe

総合スコア5434

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

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

0

ベストアンサー

質問文編集ありがとうございました。
クリックする要素と表示先要素の対応関係をオブジェクトやMapなどで持っておき、
クリックする要素すべてを含む先祖要素(<body>とか)にイベントを設定してそこで判定するのはどうでしょうか。

JavaScript

1// 今回はオブジェクトで、クリックされる要素のidと、表示する要素のname属性を持たせました。 2// nameは重複する可能性があるので、本当は表示する要素もidで指定できたほうがいいです。 3const mapClickElemIdToDisplayElemName = { 4 target: 'name', 5 target2: 'name2', 6 target3: 'name3', 7}; 8// 今回は<body>要素にイベントリスナを設定し、event.targetで実際にクリックされた要素を取得します 9document.body.addEventListener('click', event => { 10 const clickedElemId = event.target.id; 11 // 上でオブジェクトのキーに指定したidである場合のみ表示処理をする 12 if (clickedElemId in mapClickElemIdToDisplayElemName) { 13 const displayElemName = mapClickElemIdToDisplayElemName[clickedElemId]; 14 const kimetu = event.pageX ; // 水平の位置座標 15 const yaiba = event.pageY ; // 垂直の位置座標 16 document.querySelector(`[name=${displayElemName}]`).value = kimetu + ":" + yaiba; 17 } 18}); 19

こちら確認コードです

投稿2019/11/28 02:23

shinji709

総合スコア805

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問