Я пытаюсь удалить прослушиватель событий для созданных элементов 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', (function (obj) {
return function() {
obj.removeSpan();
}
})(this), false);
вместо this.removeEventListener('click', arguments.callee, false);
, но не везло.
Любая помощь очень ценится!
Упростить ненужное закрытие: (function (obj) {return function() {obj.removeSpan();}) (this) -> function (obj) {obj.removeSpan(); } – sergzach
В вашем примере obj будет ссылаться на событие, а не на класс. – Rich
Почему вы пытаетесь вызвать removeSpan из removeEventLister? Ваш removeEventListener вызывает removeSpan. Это бесконечная рекурсия. – sergzach