diff --git a/src/ngTouch/directive/ngClick.js b/src/ngTouch/directive/ngClick.js index 90274aba7322..4d4e9c02712a 100644 --- a/src/ngTouch/directive/ngClick.js +++ b/src/ngTouch/directive/ngClick.js @@ -123,6 +123,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', return; // Too old. } + // Use JQuery originalEvent + event = event.originalEvent || event; var touches = event.touches && event.touches.length ? event.touches : [event]; var x = touches[0].clientX; var y = touches[0].clientY; @@ -165,6 +167,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', // Global touchstart handler that creates an allowable region for a click event. // This allowable region can be removed by preventGhostClick if we want to bust it. function onTouchStart(event) { + // Use JQuery originalEvent + event = event.originalEvent || event; var touches = event.touches && event.touches.length ? event.touches : [event]; var x = touches[0].clientX; var y = touches[0].clientY; @@ -210,6 +214,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', } element.on('touchstart', function(event) { + // Use JQuery originalEvent + event = event.originalEvent || event; tapping = true; tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement. // Hack for Safari, which can target text nodes instead of containers. @@ -238,6 +244,8 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', element.on('touchend', function(event) { var diff = Date.now() - startTime; + // Use JQuery originalEvent + event = event.originalEvent || event; var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches : ((event.touches && event.touches.length) ? event.touches : [event]); var e = touches[0].originalEvent || touches[0]; @@ -275,6 +283,9 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement', // - 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, touchend) { + // Use JQuery originalEvent + event = event.originalEvent || event; + scope.$apply(function() { clickHandler(scope, {$event: (touchend || event)}); }); diff --git a/src/ngTouch/swipe.js b/src/ngTouch/swipe.js index 884e0800d83c..3f27246c3d1f 100644 --- a/src/ngTouch/swipe.js +++ b/src/ngTouch/swipe.js @@ -40,11 +40,10 @@ ngTouch.factory('$swipe', [function() { }; function getCoordinates(event) { + // Use JQuery originalEvent + event = event.originalEvent || event; var touches = event.touches && event.touches.length ? event.touches : [event]; - var e = (event.changedTouches && event.changedTouches[0]) || - (event.originalEvent && event.originalEvent.changedTouches && - event.originalEvent.changedTouches[0]) || - touches[0].originalEvent || touches[0]; + var e = (event.changedTouches && event.changedTouches[0]) || touches[0]; return { x: e.clientX, diff --git a/test/ngTouch/directive/ngClickSpec.js b/test/ngTouch/directive/ngClickSpec.js index 921c64578b2b..ea65f3f575a0 100644 --- a/test/ngTouch/directive/ngClickSpec.js +++ b/test/ngTouch/directive/ngClickSpec.js @@ -49,6 +49,27 @@ describe('ngClick (touch)', function() { })); + it('should unwrap a jQuery-wrapped event object on touchstart/touchend', inject(function($rootScope, $compile) { + element = $compile('
')($rootScope); + $rootScope.$digest(); + + browserTrigger(element, 'touchstart'); + browserTrigger(element, 'touchend'); + expect($rootScope.event.originalEvent).toBeUndefined(); + expect($rootScope.event.clientX).toBeDefined(); + expect($rootScope.event.clientY).toBeDefined(); + })); + + + it('should unwrap a jQuery-wrapped event object on click', inject(function($rootScope, $compile) { + element = $compile('
')($rootScope); + $rootScope.$digest(); + + browserTrigger(element, 'click'); + expect($rootScope.event.originalEvent).toBeUndefined(); + })); + + it('should not click if the touch is held too long', inject(function($rootScope, $compile, $rootElement) { element = $compile('
')($rootScope); $rootElement.append(element);