JavaScriptで同一クラスの複数要素にクリックイベントを付与する
サンプルコード
const target = document.querySelectorAll('.js-click'); for (let i = 0; i < target.length; i++) { target[i].addEventListener('click', function(){ alert('hoge'); }); };
概要
querySelectorAll
で複数ある.js-click
というクラスをすべて同一ネームで定義する。
次にfor文
を用い、存在する.js-click
をすべて取得する。
無事すべての該当要素を取得できたことにより、該当する要素へのイベントを実行することができる。
個人的にはまった泥沼
間違ったコード
const target = document.querySelectorAll('.js-click'); target.addEventListener('click', function(){ alert('hoge') });
これだとUncaught TypeError: target.addEventListener is not a function
というエラーと出会うことになる。
これはイベントに該当する要素ひとつひとつを取得できていないがために遭遇するエラー。
実際にコンソールで確認するとNodeList
(Nodeの集合体)と定義されている。
このエラーを避けるためにfor文
を使用し1つずつ取得する必要がある。