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

Commit 01cd349

Browse files
emhagmanbtford
authored andcommitted
fix(jqLite): return array from multi select in val()
1 parent 864517e commit 01cd349

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/jqLite.js

+9
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,15 @@ forEach({
479479

480480
val: function(element, value) {
481481
if (isUndefined(value)) {
482+
if (nodeName_(element) === 'SELECT' && element.multiple) {
483+
var result = [];
484+
forEach(element.options, function (option) {
485+
if (option.selected) {
486+
result.push(option.value || option.text);
487+
}
488+
});
489+
return result.length === 0 ? null : result;
490+
}
482491
return element.value;
483492
}
484493
element.value = value;

test/jqLiteSpec.js

+20
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,26 @@ describe('jqLite', function() {
661661
expect(input[0].value).toEqual('abc');
662662
expect(input.val()).toEqual('abc');
663663
});
664+
665+
it('should get an array of selected elements from a multi select', function () {
666+
expect(jqLite(
667+
'<select multiple>' +
668+
'<option selected>test 1</option>' +
669+
'<option selected>test 2</option>' +
670+
'</select>').val()).toEqual(['test 1', 'test 2']);
671+
672+
expect(jqLite(
673+
'<select multiple>' +
674+
'<option selected>test 1</option>' +
675+
'<option>test 2</option>' +
676+
'</select>').val()).toEqual(['test 1']);
677+
678+
expect(jqLite(
679+
'<select multiple>' +
680+
'<option>test 1</option>' +
681+
'<option>test 2</option>' +
682+
'</select>').val()).toEqual(null);
683+
});
664684
});
665685

666686

0 commit comments

Comments
 (0)