diff options
| -rw-r--r-- | src/jqLite.js | 9 | ||||
| -rw-r--r-- | test/jqLiteSpec.js | 20 | 
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); +    });    }); | 
