diff --git a/src/components/select/select.js b/src/components/select/select.js index 9fd593c4350..cf936051c6c 100755 --- a/src/components/select/select.js +++ b/src/components/select/select.js @@ -299,19 +299,19 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming, $mdAria, $compile, $par } }); - // Wait until postDigest so that we attach after ngModel's - // blur listener so we can set untouched. - $mdUtil.nextTick(function () { - element.on('blur', function() { - if (untouched) { - untouched = false; - ngModelCtrl.$setUntouched(); + // Attach before ngModel's blur listener to stop propagation of blur event + // to prevent from setting $touched. + element.on('blur', function(event) { + if (untouched) { + untouched = false; + if (selectScope.isOpen) { + event.stopImmediatePropagation(); } + } - if (selectScope.isOpen) return; - containerCtrl && containerCtrl.setFocused(false); - inputCheckValue(); - }); + if (selectScope.isOpen) return; + containerCtrl && containerCtrl.setFocused(false); + inputCheckValue(); }); } diff --git a/src/components/select/select.spec.js b/src/components/select/select.spec.js index 0bedf68ba3f..b21fae01bd7 100755 --- a/src/components/select/select.spec.js +++ b/src/components/select/select.spec.js @@ -158,6 +158,23 @@ describe('', function() { expect($rootScope.myForm.select.$touched).toBe(true); })); + it('should remain untouched during opening', inject(function($compile, $rootScope) { + var form = $compile('
' + + '' + + '1' + + '' + + '
')($rootScope); + var unwatch = $rootScope.$watch('myForm.select.$touched', + function(touched) { + expect(touched).toBe(false); + }); + var select = form.find('md-select'); + openSelect(select); + unwatch(); + closeSelect(); + expect($rootScope.myForm.select.$touched).toBe(true); + })); + it('restores focus to select when the menu is closed', inject(function($document) { var select = setupSelect('ng-model="val"').find('md-select'); openSelect(select);