Browse Source

fix #670 honor `number` option for select with multiple attribute

Evan You 11 years ago
parent
commit
97041547f8
2 changed files with 19 additions and 1 deletions
  1. 3 1
      src/directives/model/select.js
  2. 16 0
      test/unit/specs/directives/model_spec.js

+ 3 - 1
src/directives/model/select.js

@@ -18,7 +18,9 @@ module.exports = {
         ? getMultiValue(el)
         : el.value
       value = self.number
-        ? _.toNumber(value)
+        ? _.isArray(value)
+          ? value.map(_.toNumber)
+          : _.toNumber(value)
         : value
       self.set(value, true)
     }

+ 16 - 0
test/unit/specs/directives/model_spec.js

@@ -286,6 +286,22 @@ if (_.inBrowser) {
       expect(vm.test).toBe(1)
     })
 
+    it('select + number + multiple', function () {
+      var vm = new Vue({
+        el: el,
+        data: {
+          test: []
+        },
+        template: '<select v-model="test" multiple number><option>1</option><option>2</option></select>'
+      })
+      ;[].forEach.call(el.querySelectorAll('option'), function (o) {
+        o.selected = true
+      })
+      trigger(el.firstChild, 'change')
+      expect(vm.test[0]).toBe(1)
+      expect(vm.test[1]).toBe(2)
+    })
+
     it('select + number initial value', function () {
       var vm = new Vue({
         el: el,