addEventListenerを解除する|JavaScript 結城永人 -2024年3月22日 addEventListener()メソッドを設定して後から外したい、すなわち無駄なものを残しておくのは良くないから解除したい場合、一回だけ使うならば第三引数のoptionに{once:true}を追加すると自動的にやれるから簡単だ。 それ以外はremoveEventListener()メソッドを使わなくてはならないけど、ただし条件があってどんなaddEventListener()メソッドに対しても機能するわけではないから注意を要する。 removeEventListenerが機能するための三つの条件 以前に addEventListener() を呼び出して追加したイベントリスナーがある場合、最終的にそれを取り外す必要がある場合があります。当然ながら、同じ type と listener 引数を removeEventListener() には指定する必要があります。しかし、 options や useCapture 引数はどうでしょうか。 addEventListener() は、オプションが異なれば同じリスナーを同じ種類に複数回追加することができますが、 removeEventListener() がチェックするオプションは capture/useCapture フラグのみとなります。この値は removeEventListener() で一致するためには一致していなければなりませんが、他の値は一致していなくてもかまいません。 EventTarget: removeEventListener() メソッド|MDN Web Docs|Mozilla removeEventListenerが機能するための条件は三つある。 第一引数type:イベントの種類第二引数listener:関数かhandleevent()メソッドのオブジェクト第三引数option:選択のcaptureかuseCaptureのフラグ removeEventListenerは引数に纏わる三つの条件が一致したaddEventListenerだけを解除することができる。 addEventListenerの必須の引数はtypeとlistenerだけなので、optionが指定されてなければremoveEventListenerにも指定する必要はない。 第二引数のlistenerは無名関数では指定することができない 厄介なのはaddEventListenerの第二引数のlistenerは無名関数だと指定することができなくてremoveEventListenerを使うことができなくなる。 無名関数は名前で判別することができないので、関数の内容を同じにしてやってみてもremoveEventListenerは動かないんだ。 removeEventListenerで後から解除したいaddEventListenerの第二引数を関数にする場合は前以て一意の名前を付けたものを使うようにしなくては行けない。 removeEventListener()メソッドの基本的なプログラム 第二引数が関数かhandleevent()メソッドのオブジェクトかで、removeEventListener()メソッドのプログラムは変わる。 addEventListenerの関数にどう合わせるか サンプル ボタン 押すと一回目だけ「あいうえお」というアラートが出て二回目以降は何も起こらない。 HTML <button id="basic1" type="button">ボタン</button> JavaScript const btn1 = document.querySelector("button#basic1"); function bf1() { alert("あいうえお"); btn1.removeEventListener("click", bf1, false); } btn1.addEventListener("click", bf1, false); removeEventListenerの第二引数にはaddEventListenerと同一の関数名を入れる。 addEventListenerのhandleevent()メソッドのオブジェクトにどう合わせるか サンプル ボタン 押すと一回目だけ「アイウエオ」というアラートが出て二回目以降は何も起こらない。 HTML <button id="basic2" type="button">ボタン</button> JavaScript const btn2 = document.querySelector("button#basic2"); function bf2() { alert("アイウエオ"); btn2.removeEventListener("click", this, false); } btn2.addEventListener("click", {handleEvent:bf2}, false); removeEventListenerの第二引数にはaddEventListenerと同一のhandleevent()メソッドのオブジェクトを入れても動かなくてどんな場合でもthisを入れる。 または同じ記述にしたい場合はhandleevent()メソッドのオブジェクトを変数に格納する。 const btn2 = document.querySelector("button#basic2"), voh = {handleEvent:bf2}; function bf2() { alert("アイウエオ"); btn2.removeEventListener("click", voh, false); } btn2.addEventListener("click", voh, false); removeEventListenerの第二引数にはhandleevent()メソッドのオブジェクトを、そのまま、入れることはできない。 removeEventListener()メソッドの応用的なプログラム addEventListenerで第二引数の関数に値を送る、すなわちコールバック関数に引数を渡すとき、プログラムが変わるけど、removeEventListenerで解除するのも同じように合わせなくてはならない。 無名関数を使うと解除できなくなるのも同じなので、解除できるものとしてhandleevent()メソッドのオブジェクトかbind()メソッドを使う場合が考えられる。 前者に関しては基本的な方法と同じで、removeEventListenerの方だけthisを入れるかhandleevent()メソッドのオブジェクトを変数に格納してaddEventListenerと合わせる。 後者に関しても似ているけど、ただし関数の「this」を設定するものだからremoveEventListenerにそれを入れてもそれ自身を指定して解除することにはならず、変数に格納してaddEventListenerと合わせるプログラムだけが機能する。 bind()メソッドを使った場合にどう合わせるか サンプル ボタン 押すと一回目だけ「aiueo」というアラートが出て二回目以降は何も起こらない。 HTML <button id="advanced1" type="button">ボタン</button> JavaScript const btn3 = document.querySelector("button#advanced1"), vob = bf3.bind("aiueo"); function bf3() { alert(this); btn3.removeEventListener("click", vob, false); } btn3.addEventListener("click", vob, false); addEventListenerだけならば第二引数をbf3.bind("aiueo")としても大丈夫だけど、すると解除できなくなるので、解除したければ予めbind()メソッドの関数を変数に格納してremoveEventListenerと合わせるようにしておく。 その他、コールバック関数の戻り値を関数にするとaddEventListenerにその引数を付けて記述しても大丈夫だけれどもremoveEventListenerで解除するには引数付きの関数名をbind()メソッドの場合と同じように変数に格納しなくてはならない。 参考サイトJavaScriptのaddEventListener()で関数に引数を渡しつつ解除もしたい コメント 新しい投稿 前の投稿
白琉球の切なさの詩的で命の尊さに他ならない思い遣りの心に救われる雨上がり 白琉球の花が咲いていた。雨が多くて満開だったけれどもあっさり萎れかけているようだ。琉球躑躅ともいわれる躑躅の一種で、他の種類でも似ていて雨で直ぐに変色する花が多い。しかし白だと本当に目立つし、雨上がりの白琉球には切なさを受け取らずにいない。花柄も大きいから、殊の外、衝撃的で、...
若林志穂が明かした薬物による監禁・暴力・強姦・脅迫のNが長渕剛ならば謝罪しないのは詰まらない 元俳優の 若林志穂 が1990年代に芸能界で被った不幸についてXで明らかにした。オリジナルの投稿は本人のアカウント削除で消えたけれどもアーカイブがどこかに残っていて公開された中から確認することができる。 元女優の若林志穂さん薬物レ◯プ被害告発 人気大物歌手N(◯◯ ◯)氏から...
今春に咲き出した桜の花の写真を幾つか撮って来た サイバーショットのW170を使った。七八年前のコンパクトカメラで、 一眼カメラのα5100を買って お役後免の状態に差しかかっているけど、どうするかと考えてしまわざるを得ない。画質としては力強い。画素数が10.1MPで、レンズがカールツァイスということで、写真の風合いが凄いと...
菜の花の真っ黄色の世界で感じる幸運 近所に 菜の花 が密集して良い感じで真っ黄色に咲いていたのが壮観だった。 色も大きさも匂いも最盛期のセイヨウアブラナ 花の根本の萼片が開き切らず、斜めに立っているから セイヨウアブラナ だと思うけど、すると最大の150cmくらい伸びていて非常に大きいと驚く。 通り...
ブログのアクセスアップのコツは記事を増やして増やして増やし捲るだけで良い 日毎に記事が増えて行き、ちゃんと更新されているブログは訪問者にも検索エンジンにも好まれる。だからアクセスアップのコツはブログを更新しながら記事を増やす以外には考えられない。 するとブロガーに問われるのは根気強さなので 優れた記事が少しでもあれば放置しても人気爆発と思わ...
動物愛護のテロリストの小泉毅の元厚生事務次官宅連続襲撃事件とメッセージ 2008年に起きた 元厚生事務次官宅連続襲撃事件 は元厚生事務次官の夫婦二人が殺されて翌日に別の元厚生事務次官の妻一人が瀕死の重視を負ったもので、当時、国の関係者を狙ったテロとして大きく報道された。 元厚生事務次官宅連続襲撃事件が起きた世の中 元厚生事務次官ら連続殺傷事件...
マーク・トウェインの幽霊物語の日本語訳 十九から二十世紀のアメリカの作家、小説家で随筆家の マーク・トウェイン の小説の 幽霊物語 (1875)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
初夏の光の花々:山躑躅(朱色/赤)と鈴蘭と日陰躑躅と淀川躑躅 ゴールデンウィークに写真撮影に出かけた。快晴で初夏の光を思う存分と味わえたようだ。 前回も快晴だった ものの今回は上回っていて写真の仕上がりはさらに明るい。嬉しいし、目覚ましい。 α5100 と Touit 2.8/50M で、結構、多めに撮ったけれども失敗作もいつになく少なかっ...
沖雅也の涅槃への自殺と双極性障害 かつて俳優の 沖雅也 の自殺が伝えられたとき、遺書の言葉とされた「おやじ、涅槃でまっている」と共に何なのかと疑問を感じたのを良く覚えている。聞き慣れない「涅槃」という言葉が入っても何十年も過ぎた今振り返っても自殺者の遺書として本当に珍しい表現だったと改めて驚く。 沖雅也が書い...
アドセンスの個人のアメリカの税務情報/W-8BEN納税フォームの書き方 アドセンスに利用者の税務情報が必要となり、2021年6月1日以降、YouTubeのサイト広告などで収益を得る場合には税務情報を提出しないとアドセンスの支払いからアメリカの源泉所得税が米国内国歳入法の第三章により、控除される。 Google は、YouTube パートナー プロ...
コメント