From 4b653aeac1aca7ac551738870a2446b6810ca0df Mon Sep 17 00:00:00 2001 From: Dmitry Shirokov Date: Sun, 20 Oct 2013 20:07:50 -0700 Subject: [PATCH] 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. --- src/ng/directive/input.js | 4 ++-- test/ng/directive/inputSpec.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 07b5f9972de4..6e4961f85668 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -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; diff --git a/test/ng/directive/inputSpec.js b/test/ng/directive/inputSpec.js index c94eb9b898e1..c60960f06312 100644 --- a/test/ng/directive/inputSpec.js +++ b/test/ng/directive/inputSpec.js @@ -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(''); + 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(''); + scope.$digest(); + + changeInputValueTo('5'); + expect(inputElm).toBeValid(); + + scope.max = 0; + scope.$digest(function () { + expect(inputElm).toBeInvalid(); + done(); + }); + }); });