イベントリスナーの削除

広告

イベントに対する処理が不必要になりましたらイベントリスナーを削除することができます。イベントリスナーを削除するにはGEventクラスの静的メソッドであるremoveListenerメソッドを使います。

addListener() または addDomListener() を使用して、インストールされたハン
ドラを削除します。

引数にはGEvent.addListenerメソッドを実行した時に戻り値として取得したGEventListenerクラスのオブジェクトを指定します。

実際には次のように記述します。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.172304,136.908306), 15);

var handle = GEvent.addListener(map, "click", clickAction);

GEvent.removeListener(handle);

登録されていたイベントリスナーが削除されました。

その他の方法

先ほどは個別のイベントリスナーを削除しましたが、イベントリスナーを削除するには他にもいくつかの手段が用意されています。

まず特定のソースとイベントに対するイベントリスナーを全て削除する方法です。GEventクラスの静的メソッドであるclearListenersメソッドを使います。

addListener() または addDomListener() を使用してインストールされた、指定
されたイベントの指定されたオブジェクト上のハンドラをすべて削除します。

引数には対象となるオブジェクトとイベント名を指定します。指定のオブジェクトにおける指定のイベントを対象して登録された全てのイベントリスナーを削除します。

次は特定のソースを対象としたハンドラを全て削除する方法です。GEventクラスの静的メソッドであるclearInstanceListenersメソッドを使います。

addListener() または addDomListener() を使用してインストールされた、すべ
てのイベントの指定されたオブジェクト上のハンドラをすべて削除します。

引数には対象となるオブジェクトを指定します。指定のオブジェクトにおける全てのイベントを対象して登録された全てのイベントリスナーを削除します。

サンプルプログラム

では試してみます。

code2_1.js

var map;

function initialize() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(39.848876,140.997849), 10);

    GEvent.addListener(map, "click", clickAction);
  }
}

function clickAction(overlay, latlng, overlaylatlng){
  map.addOverlay(new GMarker(latlng));
}

function deleteEventHandler() {
  GEvent.clearListeners(map, "click");
}

map2_1.html

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>サンプル:イベントリスナーの削除</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=(key)&sensor=false"
            type="text/javascript" charset="utf-8"></script>
    <script src="./js/code2_1.js" type="text/javascript"></script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas" style="width: 400px; height: 400px"></div>

    <form>
    <p>
    <input type="button" id="btn1" value="削除" onclick="deleteEventHandler()" />
    </p>
    </form>

  </body>
</html>

ではブラウザで上記のURLを見てみます。

p2-1

地図上でクリックを行うと、その位置にマーカーを設置するようにしています。

p2-2

地図下にある「削除」ボタンを押すと、登録されているイベントハンドラが削除され地図上でクリックしてもマーカーが設置されなくなります。

p2-3

p2-4

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)