mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 23:40:23 +00:00
fix(ngMobile): emit click event for touchy clicks
Previously, no handlers for the click event would be called for the fast, touch-based ngMobile clicks, only for desktop browser clicks. Now the event will fire properly for all clicks. Closes #3219 Closes #3218 Closes #3137
This commit is contained in:
parent
d87fa00423
commit
fb7d891dac
2 changed files with 23 additions and 6 deletions
|
|
@ -233,9 +233,7 @@ ngMobile.directive('ngClick', ['$parse', '$timeout', '$rootElement',
|
|||
}
|
||||
|
||||
if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
|
||||
scope.$apply(function() {
|
||||
clickHandler(scope, {$event: event});
|
||||
});
|
||||
element.triggerHandler('click', event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -246,9 +244,12 @@ ngMobile.directive('ngClick', ['$parse', '$timeout', '$rootElement',
|
|||
// something else nearby.
|
||||
element.onclick = function(event) { };
|
||||
|
||||
// Fallback click handler.
|
||||
// Busted clicks don't get this far, and adding this handler allows ng-tap to be used on
|
||||
// desktop as well, to allow more portable sites.
|
||||
// Actual click handler.
|
||||
// There are three different kinds of clicks, only two of which reach this point.
|
||||
// - On desktop browsers without touch events, their clicks will always come here.
|
||||
// - 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) {
|
||||
scope.$apply(function() {
|
||||
clickHandler(scope, {$event: event});
|
||||
|
|
|
|||
|
|
@ -358,4 +358,20 @@ describe('ngClick (mobile)', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('the normal click event', function() {
|
||||
it('should be capturable by other handlers', inject(function($rootScope, $compile) {
|
||||
var called = false;
|
||||
|
||||
element = $compile('<div ng-click="event = $event" ></div>')($rootScope);
|
||||
|
||||
element.on('click', function() {
|
||||
called = true;
|
||||
});
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect(called).toEqual(true);
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue