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

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

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

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

Q&A

解決済

2回答

5696閲覧

複数の要素で同じイベントを発火させたい

t.togashi

総合スコア22

JavaScript

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

0グッド

1クリップ

投稿2020/03/29 11:08

前提・実現したいこと

javascriptにおいて、複数の要素に同じイベントを設定したいです。
実装方法を調べてみたのですが、当該情報を見つけることができなかたため、方法をご教示いただきたいです。

私のコードの状況を簡略化したものが以下です。
現在は、a要素の変更を検知してイベントが発火しているのですが、
これを、a,b,c,d要素のいずれかの変更を検知してイベントを発火する、
というように変更したいです。

該当のソースコード

javascript

1// ユーザーが入力するフォームの要素を取得 2const a = document.getElementById("a") 3const b = document.getElementById("b") 4const c = document.getElementById("c") 5const d = document.getElementById("d") 6 7// ユーザーの入力を元に自動入力されるフォームの要素を取得 8const e = document.getElementById("e") 9 10// ユーザーが入力したらイベントが発火 11a.addEventListener('change', function(){ 12 e.value = "変更されました" 13});

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

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

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

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

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

guest

回答2

0

ベストアンサー

まず、記載がネイティブなので、ネイティブでいきます。
(今回は、jQuery使った方がはるかに楽ではあります)
HTMLにもよりますが、かなり要件によって様々適した方法が予想されますが、
その一例だけでも記載します。
input要素に、同じクラスを当てて、走査してイベントを割り当てるパターンです。

まず、下記のように、HTMLを、IDが違うが、同じクラスを割り当てた要素、にします。

html

1<input type="radio" name="typeR" id="a" class="inCheck" value="a"> 2<input type="radio" name="typeR" id="b" class="inCheck" value="b"> 3<input type="checkbox" name="typeC" id="c" class="inCheck" value="c"> 4<input type="checkbox" name="typeC" id="d" class="inCheck" value="d"> 5<input type="text" name="typeT" id="e" value="">

JavaScriptは下記のようにします。

javascript

1const inputs = document.querySelectorAll('.inCheck'); 2const eInput = document.getElementById('e'); 3 4inputs.forEach(el=>{ 5 el.addEventListener('change', function(){ 6 eInput.value = "変更されました"; 7 }); 8});

というように、クラスは基本的に、複数の要素に対して、同じCSSや処理を当てることに適したものなので、
用法としてはこんな感じです。

他にも、ネイティブであれば、nameの値によって、走査したり、
formで囲えば、その中身として、inputを取得できたりと、様々便利な方法があるので、
その要件に応じて、適した方法を選ぶといいかと思います。

今回は、要件が明確ではないので、多少汎用的な方法を提示いたしました。

投稿2020/03/29 11:27

編集2020/03/29 11:32
miyabi_takatsuk

総合スコア9555

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

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

t.togashi

2020/03/29 12:19

> クラスは基本的に、複数の要素に対して、同じCSSや処理を当てることに適したものなので この考え方が欠如していたことに気がつくことが出来ました。 ありがとうございました。
guest

0

たとえばこうとか。

js

1// ユーザーの入力を元に自動入力されるフォームの要素を取得 2const e = document.getElementById( 'e' ); 3 4// ユーザーが入力したらイベントが発火 5document.querySelector( '#a, #b, #c, #d' ).forEach( elem => { 6 elem.addEventListener( 'change', event => { 7 e.value = '変更されました'; 8 } ); 9} );

【Document.querySelectorAll() - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll

投稿2020/03/29 11:22

kei344

総合スコア69606

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

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

t.togashi

2020/03/29 12:19

お力添えをいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問