呼び出された関数がクロージャ内にある作成されたspan要素のイベントリスナーを削除しようとしています。私はいろいろな方法を試みましたが、どれもうまくいかないようです。JavaScriptで匿名関数呼び出しによるイベントリスナーを削除する
var MyClass = function() {}
MyClass.prototype.addSpan = function (el) {
var span = document.createElement('span');
span.innerHTML = "Text here";
el.appendChild(span);
span.addEventListener('click', (function (obj) {
return function() {
obj.removeSpan();
}
})(this), false);
}
MyClass.prototype.removeSpan = function() {
alert('removing span');
this.removeEventListener('click', arguments.callee, false);
// .... remove span ....
}
myclass = new MyClass();
myclass.addSpan(document.getElementById('box'));
は、私はまた、this.removeEventListener('click', arguments.callee, false);
の代わりに
this.removeEventListener('click', (function (obj) {
return function() {
obj.removeSpan();
}
})(this), false);
を使用したが運がなかったしました。
ご協力いただきありがとうございます。
不要なクロージャを簡略化します。(function(obj){return {function}){obj.removeSpan();})(this) - > function(obj){obj.removeSpan(); } – sergzach
あなたの例では、objはクラスではなくイベントを参照します。 – Rich
なぜremoveEventListerからremoveSpanを呼び出そうとしていますか? removeEventListenerはremoveSpanを呼び出します。無限再帰です。 – sergzach