diff options
| -rw-r--r-- | src/jqLite.js | 9 | ||||
| -rw-r--r-- | test/jqLiteSpec.js | 20 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index 1bcd9224..5626f8fe 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -479,6 +479,15 @@ forEach({ val: function(element, value) { if (isUndefined(value)) { + if (nodeName_(element) === 'SELECT' && element.multiple) { + var result = []; + forEach(element.options, function (option) { + if (option.selected) { + result.push(option.value || option.text); + } + }); + return result.length === 0 ? null : result; + } return element.value; } element.value = value; diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 5b9a122c..ad7960b2 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -661,6 +661,26 @@ describe('jqLite', function() { expect(input[0].value).toEqual('abc'); expect(input.val()).toEqual('abc'); }); + + it('should get an array of selected elements from a multi select', function () { + expect(jqLite( + '<select multiple>' + + '<option selected>test 1</option>' + + '<option selected>test 2</option>' + + '</select>').val()).toEqual(['test 1', 'test 2']); + + expect(jqLite( + '<select multiple>' + + '<option selected>test 1</option>' + + '<option>test 2</option>' + + '</select>').val()).toEqual(['test 1']); + + expect(jqLite( + '<select multiple>' + + '<option>test 1</option>' + + '<option>test 2</option>' + + '</select>').val()).toEqual(null); + }); }); |
