aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jqLite.js9
-rw-r--r--test/jqLiteSpec.js20
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);
+ });
});