是否有可能取消綁定匿名回調函數...的Javascript取消綁定匿名回調函數
link.addEventListener("click", function() {
//Any piece of code
}, true);
link.removeEventListener("click", function() {
//Any piece of code
});
感謝, 阿然
是否有可能取消綁定匿名回調函數...的Javascript取消綁定匿名回調函數
link.addEventListener("click", function() {
//Any piece of code
}, true);
link.removeEventListener("click", function() {
//Any piece of code
});
感謝, 阿然
功能由指針確定的。你沒有指向你的匿名函數的指針,所以你沒有任何東西可以傳遞給remove()來告訴它要刪除哪個函數。
只需傳遞一個重複函數就不會這樣做,因爲重複函數具有不同的指針。
您需要堅持將函數分配給變量,然後將該變量傳遞給remove()。
's/pointer/reference /' – 2013-02-22 14:14:14
不是。因爲那些匿名函數實際上是不同的。這與{ 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://stackoverflow.com/a/3222540/551093 – 2013-02-22 14:13:37
我cursious,爲什麼這個問題被問。這似乎意味着你意識到* named *事件監聽器可以被刪除,這將是一個簡單的改變。難道你絕對不能改變這段代碼,而你正在尋找一種解決方法,但是很難看?您可以通過原型設計劫持'addEventListener',將其添加到存儲偵聽器的命名引用的代理函數中。可怕?是。 – 2013-02-22 14:21:36
[我的概念證明](http://jsfiddle.net/6LduX/)我在上面討論。 – 2013-02-22 14:31:39