mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
fix(ngMobile): prevent ngClick when item disabled
- the ngClick attribute was always triggered, regardless the ngDisabled/disabled attributes - we now check the DOM disabled status before triggering the original click event Closes #3124 Closes #3132
This commit is contained in:
parent
52b8211fd0
commit
e03402433d
2 changed files with 53 additions and 4 deletions
|
|
@ -232,10 +232,11 @@ ngMobile.directive('ngClick', ['$parse', '$timeout', '$rootElement',
|
|||
tapElement.blur();
|
||||
}
|
||||
|
||||
scope.$apply(function() {
|
||||
// TODO(braden): This is sending the touchend, not a tap or click. Is that kosher?
|
||||
clickHandler(scope, {$event: event});
|
||||
});
|
||||
if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
|
||||
scope.$apply(function() {
|
||||
clickHandler(scope, {$event: event});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
resetState();
|
||||
|
|
|
|||
|
|
@ -310,4 +310,52 @@ describe('ngClick (mobile)', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('disabled state', function() {
|
||||
it('should not trigger click if ngDisabled is true', inject(function($rootScope, $compile) {
|
||||
element = $compile('<div ng-click="event = $event" ng-disabled="disabled"></div>')($rootScope);
|
||||
$rootScope.disabled = true;
|
||||
$rootScope.$digest();
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect($rootScope.event).toBeUndefined();
|
||||
}));
|
||||
it('should trigger click if ngDisabled is false', inject(function($rootScope, $compile) {
|
||||
element = $compile('<div ng-click="event = $event" ng-disabled="disabled"></div>')($rootScope);
|
||||
$rootScope.disabled = false;
|
||||
$rootScope.$digest();
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect($rootScope.event).toBeDefined();
|
||||
}));
|
||||
it('should not trigger click if regular disabled is true', inject(function($rootScope, $compile) {
|
||||
element = $compile('<div ng-click="event = $event" disabled="true"></div>')($rootScope);
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect($rootScope.event).toBeUndefined();
|
||||
}));
|
||||
it('should not trigger click if regular disabled is present', inject(function($rootScope, $compile) {
|
||||
element = $compile('<button ng-click="event = $event" disabled ></button>')($rootScope);
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect($rootScope.event).toBeUndefined();
|
||||
}));
|
||||
it('should trigger click if regular disabled is not present', inject(function($rootScope, $compile) {
|
||||
element = $compile('<div ng-click="event = $event" ></div>')($rootScope);
|
||||
|
||||
browserTrigger(element, 'touchstart', [], 10, 10);
|
||||
browserTrigger(element, 'touchend', [], 10, 10);
|
||||
|
||||
expect($rootScope.event).toBeDefined();
|
||||
}));
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue