aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Sojka2013-09-04 11:20:33 -0500
committerJeff Cross2013-10-08 09:14:33 -0700
commit9fd92cc3c93a6378e8887fd46fd4ad182a375544 (patch)
tree0196a2c9eabc6e94400d7a17a61f372048350df4
parentf7fc00841bf5e3ffa2d9c2b1d316ed4dcdcde756 (diff)
downloadangular.js-9fd92cc3c93a6378e8887fd46fd4ad182a375544.tar.bz2
fix(ngTouch): ngClick does not pass touchend event when jQuery is loaded
The trigger handler event in jqLite takes an event object as a second parameter, but jQuery requires an array of parameters. This is causing the touchend event to not come thtough in the click handler when jQuery is loaded.
-rw-r--r--src/jqLite.js9
-rw-r--r--src/ngTouch/directive/ngClick.js6
-rw-r--r--test/jqLiteSpec.js12
3 files changed, 21 insertions, 6 deletions
diff --git a/src/jqLite.js b/src/jqLite.js
index d3110788..8075d874 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 d6e404ca..7dcc4041 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 08100658..de9c74da 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('<a>poke</a>'),
+ pokeSpy = jasmine.createSpy('poke'),
+ data;
+
+ element.on('click', pokeSpy);
+
+ element.triggerHandler('click', [{hello: "world"}]);
+ data = pokeSpy.mostRecentCall.args[1];
+ expect(data.hello).toBe("world");
+ });
});