Is there any possibility to unbind anonymous callback function ...
link.addEventListener("click", function () {
//Any piece of code
}, true);
link.removeEventListener("click", function () {
//Any piece of code
});
Thanks, Ajain
Is there any possibility to unbind anonymous callback function ...
link.addEventListener("click", function () {
//Any piece of code
}, true);
link.removeEventListener("click", function () {
//Any piece of code
});
Thanks, Ajain
不,因为那些匿名函数实际上是不同的。{ a: 1 } === { a: 1 }
这与返回 false的原因相同。
您需要执行以下操作:
var func = function () { ... };
element.addEventListener( 'click', func, false );
element.removeEventListener( 'click', func, false );
是的。您可以通过在某处保存匿名事件处理函数的句柄来做到这一点,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;
}
演示:http: //jsfiddle.net/jrXex/2/
函数由指针标识。你没有指向你的匿名函数的指针,所以你没有任何东西可以传递给 remove() 来告诉它要删除哪个函数。
简单地传递一个重复的函数是行不通的,因为重复的有一个不同的指针。
您需要坚持将函数分配给变量,然后将该变量传递给 remove()。