2010-11-27 10 views
1

例えば:Javascriptを:オブジェクトのメソッドに無名関数を添付イベントリスナーを削除

function myclass (htmlelement) { 
    this.element = htmlelement; 
} 

myclass.prototype.hoverfunc = function() { 
    alert (this.element.id); 
} 

myclass.prototype.doListen = function() { 
    this.element.addEventListener ('mouseover', function() {this.hoverfunc();}.bind(this),false); 
} 

elListen = new myclass (document.getElementById('foo')); 
elListen.doListen(); 

どのように私は要素からリスナーを削除しますメソッドを作成するのでしょうか?

答えて

3

なぜ匿名機能を維持したいですか? IEは行いません何か - 彼らはベースのDOMレベル2の規格であるため、

myclass.prototype.doListen = function() { 
    this.listener = function() {this.hoverfunc();}.bind(this); 
    this.element.addEventListener ('mouseover', this.listener, false); 
} 


myclass.prototype.stopListen = function() { 
    this.element.removeEventListener('mouseover', this.listener); 
} 

また、addEventListener()/removeEventListener()に注意してください。

+1

あなたがしたようにしようとすると、呼び出されたhoverfuncが必要とする(このオブジェクトの有効範囲)右の 'this'を認識していないようです - this.elementは未定義です。一方、(匿名関数を使用して)最初に記述したように試してみると、それは正常に機能し、hoverfuncは正しい 'this'スコープを持っています。私は完全にどういうわけかはわかりませんが...とにかくこれはまだ私には問題が残っています。私がそうするなら、リスナーを取り除く方法はありません... –

+0

'this.listener = function(){アラート(this); this.hoverfunc();} bind(this); 'イベントハンドラの内部に入るときに' this'が何であるかを確認するだけです。関数の.bind()拡張を取得するためにどのフレームワークを使用していますか? –

+0

これは現在動作しているようです。あなたが記述した方法を使用します。それはおそらく私は別のテストや何かからいくつかの残り物を持っているため、初めて動作しませんでした:)。とにかく、助けと素早い返答マーティンのおかげで。 –

関連する問題