diff --git a/src/jqLite.js b/src/jqLite.js index 21dbdd00d1d3..4a6c1c0f6378 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -850,13 +850,13 @@ forEach({ var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type]; var i = types.length; - var addHandler = function(type, specialHandlerWrapper) { + var addHandler = function(type, specialHandlerWrapper, noEventListener) { var eventFns = events[type]; if (!eventFns) { eventFns = events[type] = []; eventFns.specialHandlerWrapper = specialHandlerWrapper; - if (type !== '$destroy') { + if (type !== '$destroy' && !noEventListener) { addEventListenerFn(element, type, handle); } } @@ -868,6 +868,7 @@ forEach({ type = types[i]; if (MOUSE_EVENT_MAP[type]) { addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper); + addHandler(type, undefined, true); } else { addHandler(type); } diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 96ecc790bdcf..98c91c8a42c8 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -1469,6 +1469,20 @@ describe('jqLite', function() { expect(onMouseleave).toHaveBeenCalledOnce(); }); + it('should call a `mouseenter/leave` listener when manually triggering the event', function() { + var aElem = jqLite(a); + var onMouseenter = jasmine.createSpy('mouseenter'); + var onMouseleave = jasmine.createSpy('mouseleave'); + + aElem.on('mouseenter', onMouseenter); + aElem.on('mouseleave', onMouseleave); + + aElem.triggerHandler('mouseenter'); + expect(onMouseenter).toHaveBeenCalledOnce(); + + aElem.triggerHandler('mouseleave'); + expect(onMouseleave).toHaveBeenCalledOnce(); + }); it('should deregister specific listener within the listener and call subsequent listeners', function() {