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

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

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

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

Q&A

4回答

3335閲覧

JavaScript 同じIDでaddEventListenerを扱うには?

qzd

総合スコア6

JavaScript

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

0グッド

0クリップ

投稿2020/07/15 22:29

やりたい事

addEventListenerでIDが同じ物があっても反応させたい
下記コードの表示1、表示2、表示3のどれを押しても「クリックされました!」と出したいのですが、同じIDを付けると一つしか反応しなくなります
同じIDで反応させる方法はありますでしょうか?

javascript

1<button id="btn">表示1</button> 2<button id="btn">表示2</button> 3<button id="btn">表示3</button> 4 5<script> 6 var btn = document.getElementById('btn'); 7 8 9 btn.addEventListener('click', function() { 10 11 alert('クリックされました!'); 12 13 }, false); 14</script>

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

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

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

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

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

m.ts10806

2020/07/15 22:46

「調べ方」からアドバイスしたほうがよろしいのでしょうか。 過去に同じ問題に直面した人がゼロと思えるかどうかの観点を持ちましょう
guest

回答4

0

同じIDで反応させる方法はありますでしょうか?

そもそも論として、HTML内に同じIDの要素を複数作ってはいけません

投稿2020/07/15 22:39

maisumakun

総合スコア145184

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

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

0

同一ページに同一IDは存在してはいけないというルールがあります。
「ID」なので、日本におけるマイナンバーのように特定できなければなりません。

複数の要素に同じイベントを与えたいのであれば、classを振りgetElementsByClassNameで要素を取得しループしてそれぞれにeventをaddするのがセオリーです。

querySelectorAll()を使う方法もありますが、いずれにしても調べると結構出てくる情報です。

投稿2020/07/15 22:41

m.ts10806

総合スコア80850

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

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

0

※他の全ての回答も合わせてご確認ください(共通する指摘を回答させていただきます)。

同じIDで反応させる方法はありますでしょうか?

ないです。

idより
id グローバル属性は、文書全体で一意でなければならない識別子 (ID) を定義します。この属性の用途は、リンク (フラグメント識別子を使用)、スクリプト、スタイル (CSS を使用) で要素を特定することです。


まず「IDが同じ物があっても(HTML文書内でid属性を重複して書ける)」という考えが誤りです。
ブラウザの実装上、誤った記述でも動作する例はあるかもしれませんが、ルールに厳格な実行環境では使えません。

これを機に、一意(重複禁止) という規則を意識するようにしてください。

投稿2020/07/16 21:41

AkitoshiManabe

総合スコア5432

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

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

0

クラスでやるかカスタムでデータでdata-id的な処理をするか
処理的にはquerySelectorAllで回して処理するか
親ノードにイベントをセットしてターゲットノードの属性をしらべるか

投稿2020/07/16 00:05

yambejp

総合スコア114839

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

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

yambejp

2020/07/16 00:08

おなじidは使ってはいけませんが、回答の後者をつかえば反応はします (繰り返しますがこの方法はだめです) <script> window.addEventListener('DOMContentLoaded', ()=>{ document.querySelector('#parent').addEventListener('click',e=>{ if(e.target.id=="btn") console.log('click'); }); }); </script> <div id="parent"> <button id="btn">表示1</button> <button id="btn">表示2</button> <button id="btn">表示3</button> </div>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問