]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(v-model): properly detect input type=number
authorEvan You <yyx990803@gmail.com>
Mon, 19 Jul 2021 21:46:04 +0000 (17:46 -0400)
committerEvan You <yyx990803@gmail.com>
Mon, 19 Jul 2021 21:46:04 +0000 (17:46 -0400)
fix #3813

packages/runtime-dom/__tests__/directives/vModel.spec.ts
packages/runtime-dom/src/directives/vModel.ts

index 52b5e3013a5f32c61afe5f3d57c5a0f945498213..503b137cc08e4b0b2a95e0743adbe0a7aa11bb89 100644 (file)
@@ -70,6 +70,37 @@ describe('vModel', () => {
     expect(input.value).toEqual('')
   })
 
+  it('should work with number input', async () => {
+    const component = defineComponent({
+      data() {
+        return { value: null }
+      },
+      render() {
+        return [
+          withVModel(
+            h('input', {
+              type: 'number',
+              'onUpdate:modelValue': setValue.bind(this)
+            }),
+            this.value
+          )
+        ]
+      }
+    })
+    render(h(component), root)
+
+    const input = root.querySelector('input')!
+    const data = root._vnode.component.data
+    expect(input.value).toEqual('')
+    expect(input.type).toEqual('number')
+
+    input.value = 1
+    triggerEvent('input', input)
+    await nextTick()
+    expect(typeof data.value).toEqual('number')
+    expect(data.value).toEqual(1)
+  })
+
   it('should work with multiple listeners', async () => {
     const spy = jest.fn()
     const component = defineComponent({
index d721e2f3715faaf22682454bacf8f760bfb79c2e..42960eca2634b7902b0f8b45aa4649b790b15444 100644 (file)
@@ -49,7 +49,8 @@ export const vModelText: ModelDirective<
 > = {
   created(el, { modifiers: { lazy, trim, number } }, vnode) {
     el._assign = getModelAssigner(vnode)
-    const castToNumber = number || el.type === 'number'
+    const castToNumber =
+      number || (vnode.props && vnode.props.type === 'number')
     addEventListener(el, lazy ? 'change' : 'input', e => {
       if ((e.target as any).composing) return
       let domValue: string | number = el.value