创建一个包装器,用于addEventListener存储对返回函数的引用并创建一些奇怪的removeAllEvents函数:var _eventHandlers = {}; // somewhere globalfunction addListener(node, event, handler, capture) {
if(!(node in _eventHandlers)) {
// _eventHandlers stores references to nodes
_eventHandlers[node] = {};
}
if(!(event in _eventHandlers[node])) {
// each entry contains another entry for each event type
_eventHandlers[node][event] = [];
}
// capture reference
_eventHandlers[node][event].push([handler, capture]);
node.addEventListener(event, handler, capture);
}function removeAllListeners(node, event) {
if(node in _eventHandlers) {
var handlers = _eventHandlers[node];
if(event in handlers) {
var eventHandlers = handlers[event];
for(var i = eventHandlers.length; i--;) {
var handler = eventHandlers[i];
node.removeEventListener(event, handler[0], handler[1]);
}
}
}}
然后你可以用它:addListener(div, 'click', eventReturner(), false)// and laterremoveListeners(div, 'click')