diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index 32536e3..6923c4a 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -75,7 +75,7 @@ //iterate the listeners if(this._listeners && this._listeners[eventName]) { - var listeners = this._listeners[eventName], + var listeners = this._listeners[eventName].slice(0), length = listeners.length, fn = listeners[0], i; diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index 32536e3..6923c4a 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -75,7 +75,7 @@ //iterate the listeners if(this._listeners && this._listeners[eventName]) { - var listeners = this._listeners[eventName], + var listeners = this._listeners[eventName].slice(0), length = listeners.length, fn = listeners[0], i; diff --git a/test/unit/pixi/utils/EventTarget.js b/test/unit/pixi/utils/EventTarget.js index 7dd08a1..1cfc3a4 100644 --- a/test/unit/pixi/utils/EventTarget.js +++ b/test/unit/pixi/utils/EventTarget.js @@ -334,4 +334,28 @@ expect(called).to.equal(5); }); + + it('event remove during emit call properly', function () { + var called = 0; + + function cb1() { + called++; + obj.off('myevent', cb1); + } + function cb2() { + called++; + obj.off('myevent', cb2); + } + function cb3() { + called++; + obj.off('myevent', cb3); + } + + obj.on('myevent', cb1); + obj.on('myevent', cb2); + obj.on('myevent', cb3); + obj.emit('myevent', ''); + + expect(called).to.equal(3); + }); });