JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】外部関数の内側からイベントリスナーを削除する方法

JavaScriptで、外部関数の内側からイベントリスナーを削除したい場合は、removeEventListener()メソッドを使用します。

リスナーを削除する際のポイント

removeEventListener()でリスナーを正しく削除するには、addEventListener()で登録したときと同じ関数への参照を渡す必要があります。そのため、無名関数(匿名関数)をそのまま登録してしまうと、後から削除できなくなる点に注意しましょう。本記事のサンプルコードでは、登録時に名前付き関数funを渡し、それをそのまま外部関数へ引き渡すことで、内側からの削除を実現しています。

コード例

以下が実際のコードです。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<link rel="stylesheet"
href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<body>
<button id="demo">Press Me</button>
</body>
<script>
   var demoId = document.getElementById('demo');
   demoId.addEventListener('click', function fun() {
      outerFunction(this, fun);
   }, false);
   function outerFunction(self, funct) {
      console.log('outer function is called....');
      self.removeEventListener('click', funct, false);
      console.log("Listener has been removed...")
   }
</script>
</html>

プログラムの実行手順

上記のプログラムを実行するには、以下の手順に従います。

  1. ファイルをanyName.html(index.html)などの名前で保存します。
  2. VS Codeエディターで保存したファイルを右クリックします。
  3. メニューから「Open with Live Server」を選択して、ブラウザーで開きます。

実行結果

プログラムを実行すると、まず次のような画面が表示されます。

【JavaScript】外部関数の内側からイベントリスナーを削除する方法

続いて、表示された「Press Me」ボタンをクリックします。クリックをきっかけに外部関数outerFunctionが呼び出され、内部でremoveEventListener()によってリスナーが削除されます。その結果、コンソールには以下の出力が表示されます。

【JavaScript】外部関数の内側からイベントリスナーを削除する方法

一度ボタンをクリックするとリスナーが削除されるため、以降は何度押してもコンソールにログが出力されなくなります。このように、外部関数の内側からでもremoveEventListener()を使えば、イベントリスナーを確実に解除できることが確認できます。

  1. HTMLファイルからJavaScriptモジュールの関数が見つからない原因と解決方法

    エラーが発生する原因HTMLファイルからJavaScriptモジュール内の関数をインポートできない場合、最もよくある原因は、「export」ステートメントを使っていないことです。JavaScriptでは、別のファイルからインポートして使いたい関数には、事前に「export」キーワードを付けておく必要があります。「export」を付けていない関数は、そのファイルの外からは参照できないため、HTML側でimportしても「関数が見つからない」というエラーになってしまいます。解決方法:exportステートメントを追加するインポート対象の関数の前に「export」を付けるだけで解決できます。以下は、d

  2. 【JavaScript】変数に関数を代入して呼び出す方法

    JavaScriptでは、関数を変数に代入することができます(これを「関数式」と呼びます)。さらに、return文を使うことで、変数に代入した関数の処理結果を呼び出し元に返すことも可能です。以下の例では、無名関数を変数 studentNames に代入し、その内部で jQuery の each() メソッドを使って各要素の data-st 属性の値を配列に格納しています。最後に return 文で、カンマ区切りに結合した文字列を返しています。コード例<!DOCTYPE html> <html lang="en"> <head> <m