2011-12-30 1 views
4

サンプルコード:匿名関数によって宣言された要素のイベントを削除するにはどうすればよいですか?

element.addEventListener('click',function() { 
    this.style.backgroundColor = '#cc0000' 
    //after element was clicked once what to do here to remove this event ? 
},false) 

そして、それを行うには、それが直接私がコメントを入れる機能で可能ですか?

+0

イベントリスナーのリストを取得する際の関連する質問:http://stackoverflow.com/questions/7810534/have-any-browsers-implemented-the-dom3-eventlistenerlist/7814692#7814692 – user123444555621

答えて

7

addEventListener()でイベントを追加する場合は、その機能を参照して後で削除する必要があります。

element.addEventListener('click', function() { 
    this.style.backgroundColor = '#cc0000'; 
    this.removeEventListener('click', arguments.callee); 
}, false); 

が、これはES5「strictモード」では合法ではないことに注意してください:あなたは関数自体の中にいる間だけ、その後

arguments.calleeでのみ可能だ無名関数で

、と。

したがって、ちょうどあなたのコールバックの名前を与えると、そのremoveEventLister()への呼び出しで使用する方がよいでしょう:

element.addEventListener('click', function cb() { 
    this.style.backgroundColor = '#cc0000'; 
    this.removeEventListener('click', cb); 
}, false); 

デモhttp://jsfiddle.net/alnitak/RsaVE/

もう本当に匿名ない
+0

しかし、私は彼らが本当にブラウザから 'arguments.callee'機能を削除すると、何十年にもわたって非難され、魅力的な働きをすることができます。 – rsk82

+1

@ rsk82コードが '' use strict '; ''を宣言している場合は既に削除されています。 – Alnitak

2

で、しかし、ここが最適です私は(クロージャを使用して)を思い付くことができます。

(function(){ 
    var handler = function(){ 
    this.style.backgroundColor = '#cc0000' 
    element.removeEventListener('click', handler, false); 
    }; 
    element.addEventListener('click', handler, false); 
})(); 

編集:オリオン座ゼータ星の改定答えのための1 - それはこれよりもう少し簡潔です1。

関連する問題