diff --git a/lib/delegate.js b/lib/delegate.js index af37635..f50d8ba 100644 --- a/lib/delegate.js +++ b/lib/delegate.js @@ -29,6 +29,9 @@ function Delegate(root) { /** @type function() */ this.handle = Delegate.prototype.handle.bind(this); + + // Cache of event listeners removed during an event cycle + this._removedListeners = []; } /** @@ -239,6 +242,7 @@ Delegate.prototype.off = function(eventType, selector, handler, useCapture) { listener = listenerList[i]; if ((!selector || selector === listener.selector) && (!handler || handler === listener.handler)) { + this._removedListeners.push(listener); listenerList.splice(i, 1); } } @@ -346,9 +350,11 @@ Delegate.prototype.handle = function(event) { target = target.parentElement; } + var ret; + for(i=0; i -1) { continue; } returned = this.fire.apply(this, toFire[i]); @@ -359,9 +365,12 @@ Delegate.prototype.handle = function(event) { if (returned === false) { toFire[i][0][EVENTIGNORE] = true; toFire[i][0].preventDefault(); - return false; + ret = false; + break; } } + + return ret; }; /**