diff options
| -rw-r--r-- | src/ng/directive/select.js | 8 | ||||
| -rw-r--r-- | test/ng/directive/selectSpec.js | 21 | 
2 files changed, 28 insertions, 1 deletions
| diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 0b562cca..628d2177 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -394,6 +394,12 @@ var selectDirective = ['$compile', '$parse', function($compile,   $parse) {                    value = valueFn(scope, locals);                  }                } +              // Update the null option's selected property here so $render cleans it up correctly +              if (optionGroupsCache[0].length > 1) { +                if (optionGroupsCache[0][1].id !== key) { +                  optionGroupsCache[0][1].selected = false; +                } +              }              }              ctrl.$setViewValue(value);            }); @@ -531,7 +537,7 @@ var selectDirective = ['$compile', '$parse', function($compile,   $parse) {                    lastElement.val(existingOption.id = option.id);                  }                  // lastElement.prop('selected') provided by jQuery has side-effects -                if (lastElement[0].selected !== option.selected) { +                if (existingOption.selected !== option.selected) {                    lastElement.prop('selected', (existingOption.selected = option.selected));                  }                } else { diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index 6fcd1fe0..d270f438 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -733,6 +733,27 @@ describe('select', function() {        expect(sortedHtml(options[2])).toEqual('<option value="1">3</option>');      }); +    it('should not update selected property of an option element on digest with no change event', +        function() { +      createSingleSelect(); + +      scope.$apply(function() { +        scope.values = [{name: 'A'}, {name: 'B'}, {name: 'C'}]; +        scope.selected = scope.values[0]; +      }); + +      var options = element.find('option'); +      var optionToSelect = options.eq(1); + +      expect(optionToSelect.text()).toBe('B'); + +      optionToSelect.prop('selected', true); +      scope.$digest(); + +      expect(optionToSelect.prop('selected')).toBe(true); +      expect(scope.selected).toBe(scope.values[0]); +    }); +      describe('binding', function() {        it('should bind to scope value', function() { | 
