diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 31254592e668..d82bd139c3b2 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -265,7 +265,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { var lastView; ctrl.$render = function() { var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.children(), function(option) { + forEach(selectElement.find('option'), function(option) { option.selected = isDefined(items.get(option.value)); }); }; @@ -282,7 +282,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { selectElement.bind('change', function() { scope.$apply(function() { var array = []; - forEach(selectElement.children(), function(option) { + forEach(selectElement.find('option'), function(option) { if (option.selected) { array.push(option.value); } diff --git a/test/ng/directive/selectSpec.js b/test/ng/directive/selectSpec.js index 7d17a1856fd8..2b56228d17c9 100644 --- a/test/ng/directive/selectSpec.js +++ b/test/ng/directive/selectSpec.js @@ -405,6 +405,27 @@ describe('select', function() { expect(element).toEqualSelect(['A'], ['B']); }); + it('should work with optgroups', function() { + compile(''); + + expect(element).toEqualSelect('A', 'B'); + expect(scope.selection).toBeUndefined(); + + scope.$apply(function() { + scope.selection = ['A']; + }); + expect(element).toEqualSelect(['A'], 'B'); + + scope.$apply(function() { + scope.selection.push('B'); + }); + expect(element).toEqualSelect(['A'], ['B']); + }); it('should require', function() { compile(