2

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

4

3 回答 3

3

不,因为那些匿名函数实际上是不同的。{ a: 1 } === { a: 1 }这与返回 false的原因相同。

您需要执行以下操作:

var func = function () { ... };

element.addEventListener( 'click', func, false );

element.removeEventListener( 'click', func, false );
于 2013-02-22T14:15:12.747 回答
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;
}

演示:http: //jsfiddle.net/jrXex/2/

于 2013-02-22T14:27:16.510 回答
2

函数由指针标识。你没有指向你的匿名函数的指针,所以你没有任何东西可以传递给 remove() 来告诉它要删除哪个函数。

简单地传递一个重复的函数是行不通的,因为重复的有一个不同的指针。

您需要坚持将函数分配给变量,然后将该变量传递给 remove()。

于 2013-02-22T14:13:32.073 回答