Skip to content

Commit 6a3f9f1

Browse files
committed
fix: parse native number fields closes #4313
1 parent 77345c4 commit 6a3f9f1

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

.changeset/warm-dolls-attack.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'vee-validate': patch
3+
---
4+
5+
fix: parse native number fields closes #4313

packages/vee-validate/src/utils/events.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import { hasCheckedAttr, isNativeMultiSelect, isNativeSelect, isEvent } from './assertions';
22
import { getBoundValue, hasValueBinding } from './vnode';
33

4+
function parseInputValue(el: HTMLInputElement) {
5+
if (el.type === 'number') {
6+
return el.valueAsNumber;
7+
}
8+
9+
return el.value;
10+
}
11+
412
export function normalizeEventValue(value: Event | unknown): unknown {
513
if (!isEvent(value)) {
614
return value;
@@ -33,5 +41,5 @@ export function normalizeEventValue(value: Event | unknown): unknown {
3341
return selectedOption ? getBoundValue(selectedOption) : input.value;
3442
}
3543

36-
return input.value;
44+
return parseInputValue(input);
3745
}

packages/vee-validate/tests/useField.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,4 +871,26 @@ describe('useField()', () => {
871871
expect(validator).toHaveBeenCalledTimes(2);
872872
expect(field.errorMessage.value).toBe(undefined);
873873
});
874+
875+
test('handleChange parses input[type=number] value', async () => {
876+
let field!: FieldContext;
877+
878+
mountWithHoc({
879+
setup() {
880+
field = useField('field', undefined);
881+
const { handleChange } = field;
882+
883+
return {
884+
handleChange,
885+
};
886+
},
887+
template: `<input type="number" @change="handleChange" />`,
888+
});
889+
890+
await flushPromises();
891+
const input = document.querySelector('input') as HTMLInputElement;
892+
setValue(input, '123');
893+
await flushPromises();
894+
expect(field.value.value).toBe(123);
895+
});
874896
});

0 commit comments

Comments
 (0)