今回は複数要素にイベントリスナを登録する方法を紹介します。
ループでイベントリスナを登録する
HTMLコード:
<div id=“link_area“>
<a class=“bt“>1</a>
<a class=“bt“>2</a>
<a class=“bt“>3</a>
<a class=“bt“>4</a>
<a class=“bt“>5</a>
</div>
<div id=“link_area“>
<a class=“bt“>1</a>
<a class=“bt“>2</a>
<a class=“bt“>3</a>
<a class=“bt“>4</a>
<a class=“bt“>5</a>
</div>
// クラス名で取得
const alinks = document.getElementsByClassName(‘a_link’);
for (let alink of alinks) {
alink.addEventListener(‘click’,(e)=>{
console.log(e.target.id);
e.preventDefault(); //イベントのキャンセル
})
}
//タグ名から取得
const atags = document.getElementsByTagName(‘a’);
[…atags].forEach(atag=>{
atag.addEventListener(‘click’,(e)=>{
console.log(e.target.id);
e.preventDefault(); //イベントのキャンセル
});
});
要素の親要素にイベントリスナを登録する
document.getElementById(“link_area”).onclick = function(ev) {
console.log(ev.target.id);
if (ev.target.tagName === ‘A’ && ev.target.id === ‘a4’) {
alert(‘a4 clicked’);
}
ev.preventDefault();
}
console.log(ev.target.id);
if (ev.target.tagName === ‘A’ && ev.target.id === ‘a4’) {
alert(‘a4 clicked’);
}
ev.preventDefault();
}
イベントのキャンセル
伝搬の最後にブラウザーが実行するデフォルト動作に関連するイベントがあります。
イベントをキャンセルすれば、デフォルト動作の実行が止まります。
リスナーで、e.preventDefaultイベントオブジェクトのメソッドを呼びます。