fix(input): keep track of min/max attars on-the-fly

Now input[type=button] keeps track of both min and max attrs even if they change over time.
This commit is contained in:
Dmitry Shirokov 2013-10-20 20:07:50 -07:00 committed by Matias Niemelä
parent 269bc7e51f
commit 4b653aeac1
2 changed files with 32 additions and 2 deletions

View file

@ -544,8 +544,8 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
});
if (attr.min) {
var min = parseFloat(attr.min);
var minValidator = function(value) {
var min = parseFloat(attr.min);
if (!ctrl.$isEmpty(value) && value < min) {
ctrl.$setValidity('min', false);
return undefined;
@ -560,8 +560,8 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
}
if (attr.max) {
var max = parseFloat(attr.max);
var maxValidator = function(value) {
var max = parseFloat(attr.max);
if (!ctrl.$isEmpty(value) && value > max) {
ctrl.$setValidity('max', false);
return undefined;

View file

@ -667,6 +667,21 @@ describe('input', function() {
expect(scope.value).toBe(100);
expect(scope.form.alias.$error.min).toBeFalsy();
});
it('should validate even if min value changes on-the-fly', function(done) {
scope.min = 10;
compileInput('<input type="number" ng-model="value" name="alias" min="{{min}}" />');
scope.$digest();
changeInputValueTo('5');
expect(inputElm).toBeInvalid();
scope.min = 0;
scope.$digest(function () {
expect(inputElm).toBeValid();
done();
});
});
});
@ -686,6 +701,21 @@ describe('input', function() {
expect(scope.value).toBe(0);
expect(scope.form.alias.$error.max).toBeFalsy();
});
it('should validate even if max value changes on-the-fly', function(done) {
scope.max = 10;
compileInput('<input type="number" ng-model="value" name="alias" max="{{max}}" />');
scope.$digest();
changeInputValueTo('5');
expect(inputElm).toBeValid();
scope.max = 0;
scope.$digest(function () {
expect(inputElm).toBeInvalid();
done();
});
});
});