gpt4 book ai didi

javascript - 在 JavaScript 中使用匿名函数调用删除事件监听器

转载 作者:行者123 更新时间:2023-11-29 18:29:14 30 4
gpt4 key购买 nike

我正在尝试为创建的 span 元素删除事件监听器,其中调用的函数在闭包中。我尝试了各种方法,但似乎都不起作用。

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); 但运气不好。

非常感谢任何帮助!

最佳答案

var MyClass = function () {}
MyClass.prototype.listener=null;
MyClass.prototype.addSpan = function (el) {
var span = document.createElement('span');
span.innerHTML = "Text here";
el.appendChild(span);
span.addEventListener('click', (function (obj) {
return obj.listener = function () {
obj.removeSpan(this); // here 'this' refers to 'span'
}
})(this), false);
}

MyClass.prototype.removeSpan = function (el) {
alert('removing span');
el.removeEventListener('click', this.listener, false);
// .... remove span ....
}

myclass = new MyClass();
myclass.addSpan(document.getElementById('box'));

如果没有监听器的引用,你就不能删除它,所以我还在 MyClass 的原型(prototype)中添加了一个属性(监听器),然后将引用返回为 return obj.listener 和你还需要像我传递它一样传递对象> 这样我就可以完成 el.removeEventListener,希望对您有所帮助。

你也可以这样做

var MyClass = function () {this.listener=null;}

代替

MyClass.prototype.listener=null;

这是一个 example .

关于javascript - 在 JavaScript 中使用匿名函数调用删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928754/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com