Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix(select): double array issue with multislect and jQuery
Browse files Browse the repository at this point in the history
  • Loading branch information
mhevery committed Feb 22, 2012
1 parent 13b21aa commit 85b2084
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/widget/select.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [];
Expand All @@ -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 == ''){
Expand Down
21 changes: 21 additions & 0 deletions test/widget/selectSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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']);
});
});
});
});

0 comments on commit 85b2084

Please sign in to comment.