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);
+ });
});