From 01cd34957e778a2fa8d26e2805c2dd5a7f986465 Mon Sep 17 00:00:00 2001 From: Eric Hagman Date: Wed, 26 Jun 2013 09:49:21 -0400 Subject: fix(jqLite): return array from multi select in val() --- src/jqLite.js | 9 +++++++++ test/jqLiteSpec.js | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+) 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( + '').val()).toEqual(['test 1', 'test 2']); + + expect(jqLite( + '').val()).toEqual(['test 1']); + + expect(jqLite( + '').val()).toEqual(null); + }); }); -- cgit v1.2.3