
リンク先で下記のように書かれていますが、どういう意味でしょうか?
>問題は、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascript 特定のタグのidの存...
-
Google maps API V3 ルート案内
-
javascriptで自動計算フォーム...
-
JavaScript を使ってpkゲームを...
-
関数でy=g(x)のgとは何の略です...
-
フレームページに文字を書き込...
-
javascriptで文字挿入でtoggle...
-
配列を作って総当たりで距離を...
-
Linux バイナリ実行できない "...
-
『名前空間』の意味を教えてく...
-
javascriptのreturnがわからない
-
JavaScriptを使ってXMLにタグを...
-
ダブルでコンボボックスについ...
-
JAVASCRIPTで万年カレンダーを...
-
正規表現で半角数字1桁のみを全...
-
ASP+アクセスでのSQLコメントに...
-
class指定したHTML要素の背景色...
-
要素のリサイズをひろい、他の...
-
ジェネレーターの作り方
-
テキストを抽出したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ActiveXobjectが作成できない
-
<a>タグのテキストを取得
-
onchangeイベントを使ってspan...
-
javascriptで編集可能不可能の...
-
innerHTML実行後のイベント
-
javascriptの質問です
-
クリックでURLに飛ばすときに、...
-
ボタン上でマウスを押している...
-
別フレームのタグ属性を取得す...
-
DIV内のDIV要素を移動する。
-
HTML:Tableタグに対し、JavaScr...
-
任意の座標をクリックさせるには
-
お気に入り用のボタンを配置し...
-
1つの処理で複数表示させたい
-
WordPressのコンタクトフォーム...
-
指定した数値同士を合計計算し...
-
JavaScriptで文字列の置き換え
-
フォーカスを合わせる
-
div要素内の全input要素をdisable
-
[javascript]DOCTYPE宣言対応に...
おすすめ情報