イベントリスナーとイベントの動作の違い (addEventListener と on..... の動作の違い) - JavaScript

イベントリスナーとイベントの動作の違いを紹介します。

イベントリスナーとイベント

イベントリスナーはオブジェクトのaddEventListener()メソッドを呼び出し、イベントリスナーをオブジェクトに追加します。イベントはオブジェクトのonclickなどのイベントに関数を設定します。

イベントを利用した場合

コード

以下のコードを記述します。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
	<meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function () {
      var button = document.getElementById("Button1");
      button.onclick = click_01;
      button.onclick = click_02;
      button.onclick = click_03;
    }

    function click_01() {
      var text = document.getElementById("Text1");
      text.value = "ボタンがクリックされました。";
    }
    function click_02() {
      var text = document.getElementById("output");
      text.innerHTML = "ボタンがクリックされました。";
    }
    function click_03() {
      window.top.document.title = "ボタンがクリックされました。";
    }

  </script>
</head>
<body>
  <input id="Button1" type="button" value="button" />
  <input id="Text1" type="text" />
  <div id="output"></div>
</body>
</html>

解説

イベントに関数を設定した場合は、代入となるため、上記のコードでは、onclickにはclick_03()の関数のみが設定されます。ボタンをクリックした際にもclick_03()関数のみが実行され、ウィンドウのタイトルのみにメッセージが表示されます。

補足

JavaScriptではC#のデリゲートのような以下の記述はできません。
  window.onload = function () {
    var button = document.getElementById("Button1");
    button.onclick += click_01;
    button.onclick += click_02;
    button.onclick += click_03;
  }

実行結果

HTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[button]をクリックします。タイトルバー(タブのタイトル)の文字列が「ボタンがクリックされました。」に変化します。他の部分には変化がありません。

イベントリスナーを利用した場合

コード

以下のコードを記述します。
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <meta charset="utf-8" />
  <script type="text/javascript">
    window.onload = function () {
      var button = document.getElementById("Button1");
      button.addEventListener('click', click_01, false);
      button.addEventListener('click', click_02, false);
      button.addEventListener('click', click_03, false);
    }

    function click_01() {
      var text = document.getElementById("Text1");
      text.value = "ボタンがクリックされました。";
    }
    function click_02() {
      var text = document.getElementById("output");
      text.innerHTML = "ボタンがクリックされました。";
    }
    function click_03() {
      window.top.document.title = "ボタンがクリックされました。";
    }

  </script>
</head>
<body>
  <input id="Button1" type="button" value="button" />
  <input id="Text1" type="text" />
  <div id="output"></div>
</body>
</html>

解説

イベントリスナーを利用した場合は、リスナー関数をオブジェクトに複数追加できるため、上記のコードでは、clickイベントにはclick_01(),click_02(),click_03()の3つの関数が設定されます。ボタンをクリックした際にはclick_01(),click_02(),click_03()の3つの関数が実行され、ウィンドウのタイトル、テキストボックス、DIV枠にメッセージが表示されます。

実行結果

HTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[button]をクリックします。タイトルバー(タブのタイトル)の文字列、テキストボックス、divタグのエリアの3か所に「ボタンがクリックされました。」の文字列が表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2019-06-23
作成日: 2015-10-15
iPentec all rights reserverd.