diff options
| -rw-r--r-- | src/widget/select.js | 7 | ||||
| -rw-r--r-- | test/widget/selectSpec.js | 21 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/widget/select.js b/src/widget/select.js index 332009d2..9f8faff2 100644 --- a/src/widget/select.js +++ b/src/widget/select.js @@ -243,9 +243,8 @@ var selectDirective = ['$formFactory', '$compile', '$parse', widget.$apply(function() { var optionGroup, collection = valuesFn(modelScope) || [], - key = selectElement.val(), tempScope = inherit(modelScope), - value, optionElement, index, groupIndex, length, groupLength; + key, value, optionElement, index, groupIndex, length, groupLength; if (multiple) { value = []; @@ -257,13 +256,15 @@ var selectDirective = ['$formFactory', '$compile', '$parse', for(index = 1, length = optionGroup.length; index < length; index++) { if ((optionElement = optionGroup[index].element)[0].selected) { + key = optionElement.val(); if (keyName) tempScope[keyName] = key; - tempScope[valueName] = collection[optionElement.val()]; + tempScope[valueName] = collection[key]; value.push(valueFn(tempScope)); } } } } else { + key = selectElement.val(); if (key == '?') { value = undefined; } else if (key == ''){ diff --git a/test/widget/selectSpec.js b/test/widget/selectSpec.js index 7206ade8..00bc2192 100644 --- a/test/widget/selectSpec.js +++ b/test/widget/selectSpec.js @@ -591,6 +591,27 @@ describe('select', function() { browserTrigger(select, 'change'); expect(scope.selected).toEqual([scope.values[0]]); }); + + it('should select from object', function() { + createSelect({ + 'ng:model':'selected', + 'multiple':true, + 'ng:options':'key as value for (key,value) in values' + }); + scope.values = {'0':'A', '1':'B'}; + + scope.selected = ['1']; + scope.$digest(); + expect(select.find('option')[1].selected).toBe(true); + + select.find('option')[0].selected = true; + browserTrigger(select, 'change'); + expect(scope.selected).toEqual(['0', '1']); + + select.find('option')[1].selected = false; + browserTrigger(select, 'change'); + expect(scope.selected).toEqual(['0']); + }); }); }); }); |
