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