diff options
| author | Eric Hagman | 2013-06-26 09:49:21 -0400 |
|---|---|---|
| committer | Ken Sheedlo | 2013-08-07 21:33:37 -0700 |
| commit | 306a613440175c7fd61d1d6eb249d1e53a46322e (patch) | |
| tree | 813e3c57b741a224ee608ac8d108b02a6d83aa82 | |
| parent | 4be7612079f34c8b95c82f24b822e2ae06c82270 (diff) | |
| download | angular.js-306a613440175c7fd61d1d6eb249d1e53a46322e.tar.bz2 | |
fix(jqLite): return array from multi select in val()
| -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 775fef51..ae6da9f7 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 3648cda4..ab98a70f 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( + '<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); + }); }); |
