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

Commit 306a613

Browse files
emhagmanksheedlo
authored andcommitted
fix(jqLite): return array from multi select in val()
1 parent 4be7612 commit 306a613

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
@@ -499,6 +499,15 @@ forEach({
499499

500500
val: function(element, value) {
501501
if (isUndefined(value)) {
502+
if (nodeName_(element) === 'SELECT' && element.multiple) {
503+
var result = [];
504+
forEach(element.options, function (option) {
505+
if (option.selected) {
506+
result.push(option.value || option.text);
507+
}
508+
});
509+
return result.length === 0 ? null : result;
510+
}
502511
return element.value;
503512
}
504513
element.value = value;

test/jqLiteSpec.js

+20
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,26 @@ describe('jqLite', function() {
684684
expect(input[0].value).toEqual('abc');
685685
expect(input.val()).toEqual('abc');
686686
});
687+
688+
it('should get an array of selected elements from a multi select', function () {
689+
expect(jqLite(
690+
'<select multiple>' +
691+
'<option selected>test 1</option>' +
692+
'<option selected>test 2</option>' +
693+
'</select>').val()).toEqual(['test 1', 'test 2']);
694+
695+
expect(jqLite(
696+
'<select multiple>' +
697+
'<option selected>test 1</option>' +
698+
'<option>test 2</option>' +
699+
'</select>').val()).toEqual(['test 1']);
700+
701+
expect(jqLite(
702+
'<select multiple>' +
703+
'<option>test 1</option>' +
704+
'<option>test 2</option>' +
705+
'</select>').val()).toEqual(null);
706+
});
687707
});
688708

689709

0 commit comments

Comments
 (0)