【JavaScript】addEventListenerで複数イベントを一度に追加する賢い方法

要素に対してaddEventListenerを使う時

  • 監視対象のイベントが2つ以上ある
  • 発火時に処理したいコールバックが同じ

こういう場合のコードの書き方について

極力無駄なコードは書きたくないはずです。

そこでJavaScriptでaddEventListenerを使うとき
複数イベントを一度に追加する方法を考えてみました。

jQueryなら一度に複数イベントを追加できるか…

例えばこういうケースで考えてみます。

  • 対象は mouseup touchend の2つ
  • どちらも同じコールバックを実行したい

そういう時、jQueryでは簡単に実現できます。

▼ 一度に複数イベントを追加するjQueryコード

jQueryはこういう所が便利なんですよね。

でも必ず使えるわけじゃなくて、

  • 諸事情があってjQueryを導入できない
  • どうしてもjQueryを使いたくない

環境によっては使えないこともあります。

残念ながらaddEventListenerではjQuery的に書けない

そしてライブラリなしのJavaScriptの場合

先ほどのjQuery的な記述ができません。

▼ 例えば次の書き方はできないってこと

エラーは出ないけど意味が通らないコードです。

できたら便利だけど仕様的に不可能

コールバック関数を逐一定義するのも少し面倒

そこで初めに思いつくのは次の対処法

  • 別途でコールバック関数を定義しておく
  • それを各イベントごとにリスナー追加する

どういうことかはコードを見ればわかります。

▼ 1つのコールバックを複数イベントに結び付ける

処理がハッキリしてるなら↑この方法でも問題なし

でもこの方法にはあ次の欠点もあります。

  • 即時関数としてコールバックを渡せない
  • コールバック関数の名前に悩んでしまう
  • イベント分だけaddEventListenerが必要

別にこれでも間違ってないし、手段の1つです。

ただしコールバック関数に対して固有の名前が必要になってしまうし、いちいち名前を考えるのが面倒。どうせなら即時関数を渡したいというのが本音です。

関数名を考えるのが好きな人なら問題ないですね。

でも僕は違うので別の方法を模索します。

複数イベントをaddEventListenerする冴えた書き方

そこで思いついたのが次の方法です。

▼ 複数イベントをaddEventListenerするコード例

先ほどのコードより冴えてる感じがしませんか?

いちいちユニーク関数名を考えなくていいし、即自関数により複数イベントに対してaddEventListenerを実行できています。とってもjQuery的

即時関数を使えるのが最大のメリット

関数名に頭を悩まされなくなります。

以上、JSで複数イベントを一気に追加する方法でした。

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください