aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/select.js8
-rw-r--r--test/ng/directive/selectSpec.js21
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() {