diff --git a/src/jqLite.js b/src/jqLite.js index d3110788b3a6..8075d8745c5e 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -803,13 +803,16 @@ forEach({ triggerHandler: function(element, eventName, eventData) { var eventFns = (JQLiteExpandoStore(element, 'events') || {})[eventName]; - eventData = eventData || { + + eventData = eventData || []; + + var event = [{ preventDefault: noop, stopPropagation: noop - }; + }]; forEach(eventFns, function(fn) { - fn.call(element, eventData); + fn.apply(element, event.concat(eventData)); }); } }, function(fn, name){ diff --git a/src/ngTouch/directive/ngClick.js b/src/ngTouch/directive/ngClick.js index d6e404caf9e4..7dcc4041c27a 100644 --- a/src/ngTouch/directive/ngClick.js +++ b/src/ngTouch/directive/ngClick.js @@ -238,7 +238,7 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', } if (!angular.isDefined(attr.disabled) || attr.disabled === false) { - element.triggerHandler('click', event); + element.triggerHandler('click', [event]); } } @@ -255,9 +255,9 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', // - On mobile browsers, the simulated "fast" click will call this. // - But the browser's follow-up slow click will be "busted" before it reaches this handler. // Therefore it's safe to use this directive on both mobile and desktop. - element.on('click', function(event) { + element.on('click', function(event, touchend) { scope.$apply(function() { - clickHandler(scope, {$event: event}); + clickHandler(scope, {$event: (touchend || event)}); }); }); diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 081006584a3a..de9c74da71bb 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -1343,6 +1343,18 @@ describe('jqLite', function() { event = pokeSpy.mostRecentCall.args[0]; expect(event.preventDefault).toBeDefined(); }); + + it('should pass data as an additional argument', function() { + var element = jqLite('poke'), + pokeSpy = jasmine.createSpy('poke'), + data; + + element.on('click', pokeSpy); + + element.triggerHandler('click', [{hello: "world"}]); + data = pokeSpy.mostRecentCall.args[1]; + expect(data.hello).toBe("world"); + }); });