diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index 39c04a7..4e701d9 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -155,7 +155,7 @@ return this; var list = this._listeners[eventName], - i = list.length = fn ? list.length : 0; + i = fn ? list.length : 0; while(i-- > 0) { if(list[i] === fn || list[i]._originalHandler === fn) { diff --git a/src/pixi/utils/EventTarget.js b/src/pixi/utils/EventTarget.js index 39c04a7..4e701d9 100644 --- a/src/pixi/utils/EventTarget.js +++ b/src/pixi/utils/EventTarget.js @@ -155,7 +155,7 @@ return this; var list = this._listeners[eventName], - i = list.length = fn ? list.length : 0; + i = fn ? list.length : 0; while(i-- > 0) { if(list[i] === fn || list[i]._originalHandler === fn) { diff --git a/test/unit/pixi/utils/EventTarget.js b/test/unit/pixi/utils/EventTarget.js index 1524ff5..7dd08a1 100644 --- a/test/unit/pixi/utils/EventTarget.js +++ b/test/unit/pixi/utils/EventTarget.js @@ -166,6 +166,61 @@ expect(called).to.equal(5); }); + it('multiple handlers for one event with some removed', function () { + var called = 0; + + var onMyEvent = function () { + called++; + }, + onMyEvent2 = function () { + called++; + }; + + // add 2 handlers and confirm they both get called + obj.on('myevent', onMyEvent); + obj.on('myevent', onMyEvent); + obj.on('myevent', onMyEvent2); + obj.on('myevent', onMyEvent2); + + obj.emit('myevent'); + + expect(called).to.equal(4); + + // remove one of the handlers, emit again, then ensure 1 more call is made + obj.off('myevent', onMyEvent); + + obj.emit('myevent'); + + expect(called).to.equal(6); + }); + + it('calls to off without a handler do nothing', function () { + var called = 0; + + var onMyEvent = function () { + called++; + }; + + obj.on('myevent', onMyEvent); + obj.on('myevent', onMyEvent); + + obj.emit('myevent'); + + expect(called).to.equal(2); + + obj.off('myevent'); + + obj.emit('myevent'); + + expect(called).to.equal(4); + + obj.off('myevent', onMyEvent); + + obj.emit('myevent'); + + expect(called).to.equal(4); + }); + it('handles multiple instances with the same prototype', function () { var called = 0;