diff --git a/src/jqLite.js b/src/jqLite.js index 775fef512a67..ae6da9f7055d 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -499,6 +499,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 3648cda487d7..ab98a70f4587 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -684,6 +684,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( + '').val()).toEqual(['test 1', 'test 2']); + + expect(jqLite( + '').val()).toEqual(['test 1']); + + expect(jqLite( + '').val()).toEqual(null); + }); });