是否有可能取消绑定匿名回调函数...
link.addEventListener("click", function () {
//Any piece of code
}, true);
link.removeEventListener("click", function () {
//Any piece of code
});
谢谢, 阿然
答案 0 :(得分:3)
没有。因为那些匿名函数实际上是不同的。这与{ a: 1 } === { a: 1 }
返回false的原因相同。
您需要执行以下操作:
var func = function () { ... };
element.addEventListener( 'click', func, false );
element.removeEventListener( 'click', func, false );
答案 1 :(得分:3)
是。您可以使用arguments.callee
在某处保存匿名事件处理函数的句柄,稍后使用此保存的引用取消绑定。
// binding
var el = document.getElementById('foo');
el.addEventListener('click', function(e) {
alert('Hi');
// this is where we save a handle to the anonymous handler
// arguments.callee gives us a reference to this function
el['_ev'] = arguments.callee;
}, false);
// unbinding
var el = document.getElementById('foo'), handler = el['_ev'];
if(handler) {
// here we use the saved reference to unbind it
el.removeEventListener('click', handler);
el['_ev'] = false;
}
答案 2 :(得分:2)
函数由指针标识。你没有指向你的匿名函数的指针,所以你没有任何东西要传递给remove()来告诉它要删除哪个函数。
简单地传递一个重复的函数不会这样做,因为副本有一个不同的指针。
您需要坚持将函数赋值给变量,然后将该变量传递给remove()。