aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2012-02-03 10:34:16 -0800
committerMisko Hevery2012-02-21 22:45:59 -0800
commit85b2084f578652cc0dcba46c689683fc550554fe (patch)
treedae850e1da51fdd975cfa20c725fe25ec85a0b00
parent13b21aaf5ac7267288fd94a50ece9a1f1ec2e379 (diff)
downloadangular.js-85b2084f578652cc0dcba46c689683fc550554fe.tar.bz2
fix(select): double array issue with multislect and jQuery
-rw-r--r--src/widget/select.js7
-rw-r--r--test/widget/selectSpec.js21
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']);
+ });
});
});
});