
リンク先で下記のように書かれていますが、どういう意味でしょうか?
>問題は、bind の付いたリスナーを削除できないということ
・「bind の付いたリスナーを削除」しないと何がマズいのでしょうか?
・thisの挙動が変わったままになるから?
・thisの挙動が変わるというのは、Somethingの中だけの話ではないのでしょうか?
・この場合のリスナーは? addEventListener('click', this.onclick2を指すのでしょうか?
>リスナーを後で削除できるように、そのリスナーへの参照を残しておく必要があります
・「リスナーへの参照を残しておく」って、具体的にどういうことなのでしょうか?
https://developer.mozilla.org/ja/docs/Web/API/Ev …
No.3ベストアンサー
- 回答日時:
・リスナーについて
http://e-words.jp/w/E383AAE382B9E3838AE383BC.html
var listener = function(){ /*ボタンが押された時の処理*/};
var button = document.getElementById("buttonのID");
button.addEventListener("click", listener , false);
ボタンクリック時のイベントを登録した所です、
addEventListenerの2番目の引数が、clickしたときに呼ばれる関数です。
この関数の事をリスナーという別の言い方をしているだけで
リスナーとは関数の事です。
---------------------------------------
・「bind の付いたリスナーを削除」しないと何がマズいのでしょうか?
イベントを解除するにはremoveEventListenerを使います
https://developer.mozilla.org/ja/docs/Web/API/Ev …
removeEventListenerの第2引数は、addEventListenerに登録した関数(リスナー)を指定します。
removeEventListener("click", /*addEventLisnerに登録した関数*/, false);
----------
var button = document.getElementById("buttonのID");
button.addEventListener("click", function(){/*ボタンが押された時の処理*/ } , false);
このように登録した場合、解除したいけどできません。
(removeEventListenerの第2引数に何をいれれば・・・ってなります)
var listener = function(){ /*ボタンが押された時の処理*/};
var button = document.getElementById("buttonのID");
button.addEventListener("click", listener , false);
このように関数を変数に『(参照を)覚えておく』事で、登録解除ができるのです。
button.removeEventListener("click", listener , false);
--------------------------------------------------------------------
・「リスナーへの参照を残しておく」って、具体的にどういうことなのでしょうか?
bind関数の戻り値は関数なので、上記の通り変数に覚えておかないと解除できないということです。
https://developer.mozilla.org/ja/docs/Web/API/Ev …
この説明で以下のような処理があります。
element.addEventListener('click', this.onclick1, false);
element.addEventListener('click', this.onclick2.bind(this), false);
さて、イベント解除することを考えてみましょう
上はthis.onclick1関数を指定したので、以下のように解除できます。
element.removeEventListener('click', this.onclick1, false);
(onclick1メンバー変数に関数を覚えている)
下はthis.onclick2.bind(this)で『戻ってきた関数』を登録していますが覚えていません
その為、どこかの変数に覚えておかないと解除できません。
var listener = this.onclick2.bind(this);
element.addEventListener('click', listener , false);
------------------------------------------
余談ですが、ローカル変数は関数から抜けるとなくなるので、実際はメンバー変数なりに覚える事になります。
this.xxxx = this.onclick2.bind(this);
回答&詳細な解説ありがとうございました。
>(removeEventListenerの第2引数に何をいれれば・・・ってなります)
・この一文読んで、ようやく意味が分かりました
>関数の事をリスナーという別の言い方をしているだけでリスナーとは関数の事です
・説明分かりやすかったです
>関数を変数に『(参照を)覚えておく』事で、登録解除ができる
>bind関数の戻り値は関数なので、上記の通り変数に覚えておかないと解除できない
・ここの説明も大変分かりやすかったです
・単にそういう意味だったんですね
・ものすごく誤解していましたー
No.2
- 回答日時:
実際に使ってみれば意味が分かるはずです。
出来るだけ自分でコードを書いて試行錯誤してみてください。
関数オブジェクトは参照であり、addEventListener, removeEventListener では同じlisnerオブジェクトを参照する必要があります。
https://developer.mozilla.org/ja/docs/Web/API/Ev …
# Re: re97さん
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript addEventListener()でリスナー関数に名前を付ける構文を教えてください 1 2023/07/01 17:31
- ラジオ あの~私がいつも聞いている地元のラジオのことなんですが、金曜のラジオで、大体この時期、DJさんの家の 2 2022/10/17 01:20
- その他(動画サービス) 私はTikTok配信をしてるのですが、あるリスナーから相談を持ちかけられて、僕とモデレーターと3人だ 1 2023/07/21 11:45
- その他(悩み相談・人生相談) 配信たまにしてます。顔は出してなくて、基本ラジオ雑談でたまに首から下の動画とか外配信中心です。他の配 2 2022/08/10 21:10
- ツイキャス ツイキャスで他の人の枠にコラボに上がると主と私は分からないのですが他のリスナーからはハウリングしてる 1 2023/05/02 00:11
- ラジオ あの~私がいつも聞いている地元のラジオのことなんですが、金曜のラジオで、大体この時期、DJさんの家の 1 2022/10/14 23:35
- ラジオ おすすめのラジオ番組教えてください 菅田将暉やCreepy Nutsのオールナイトニッポンのような、 1 2023/03/01 00:03
- ツイキャス ツイキャスの通知について。 1 2022/12/01 06:57
- その他(悩み相談・人生相談) 配信者とリスナーが会うことをどう思いますか? オフ会とかでなく個人的にです。 すごく仲良くなってお互 3 2022/10/29 00:04
- ツイキャス ポコチャという投げ銭アプリについて 2 2023/07/03 19:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
日本語入力の禁止
-
innerHTML実行後のイベント
-
javascriptであるボタンを押す...
-
javascriptで編集可能不可能の...
-
ボタン上でマウスを押している...
-
DIV内のDIV要素を移動する。
-
Javascriptでページ内の任意ク...
-
onchangeイベントを使ってspan...
-
WordPressのコンタクトフォーム...
-
【Tabキー】特定の範囲内だけで...
-
重複しないくじの作り方がわか...
-
javascriptでiframeのURL変更は?
-
C#で、ContextMenuStripに動的...
-
Excel VBA の ChangeFileAccess
-
Matlabで自作関数をオーバーロード
-
C#テキストボックスの文字を配...
-
javaで画像をランダム表示しつ...
-
GASでGoogleフォームの自動返信...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
innerHTML実行後のイベント
-
onchangeイベントを使ってspan...
-
javascriptで編集可能不可能の...
-
javascript 特定のタグのidの存...
-
javascriptでスロットゲームを...
-
任意の座標をクリックさせるには
-
クリックを押した時にリンク先...
-
モーダルダイアログウィンドウ...
-
javascriptでCSVを呼出しvlookup
-
onclickを使わずにイベント処理...
-
【Tabキー】特定の範囲内だけで...
-
RadioButtonListの表示制御
-
オンマウスで音を鳴らせる為には?
-
Javascriptでページ内の任意ク...
-
オブジェクトがありません
-
javascriptであるボタンを押す...
-
オブジェクトがぶつかった時の処理
-
JavaScriptのID要素の中身をque...
おすすめ情報