diff --git a/docs/markdown/en-US/field.md b/docs/markdown/en-US/field.md
index e7ca0333d..39ec7ff77 100644
--- a/docs/markdown/en-US/field.md
+++ b/docs/markdown/en-US/field.md
@@ -81,7 +81,7 @@ Filed support all native properties of input tag,such as `maxlength`、`placeh
| Attribute | Description | Type | Default | Accepted Values |
|-----------|-----------|-----------|-------------|-------------|
-| type | Filed type | `String` | `text` | `number` `email`
`textarea` `tel`
`datetime` `date`
`password` `url` |
+| type | Filed type | `String` | `text` | `number` `email` `textarea` `tel` `datetime` `date` `password` `url` |
| value | Filed value | `String` | - | - |
| label | Filed label | `String` | - | - |
| disabled | Disable field | `Boolean` | `false` | - |
diff --git a/docs/markdown/zh-CN/field.md b/docs/markdown/zh-CN/field.md
index 8b0532faf..0fffdab48 100644
--- a/docs/markdown/zh-CN/field.md
+++ b/docs/markdown/zh-CN/field.md
@@ -83,7 +83,7 @@ Filed 默认支持 Input 标签所有的原生属性,比如 `maxlength`、`pla
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|-----------|-----------|-----------|-------------|-------------|
-| type | 输入框类型 | `String` | `text` | `number` `email`
`textarea` `tel`
`datetime` `date`
`password` `url` |
+| type | 输入框类型 | `String` | `text` | `number` `email` `textarea` `tel` `datetime` `date` `password` `url` |
| value | 输入框的值 | `String` | - | - |
| label | 输入框标签 | `String` | - | - |
| disabled | 是否禁用输入框 | `Boolean` | `false` | - |
diff --git a/packages/field/index.vue b/packages/field/index.vue
index 3ff22ba5d..48acaa86e 100644
--- a/packages/field/index.vue
+++ b/packages/field/index.vue
@@ -29,6 +29,7 @@
class="van-field__control"
:type="type"
:value="value"
+ @keypress="onKeypress"
@input="onInput"
@focus="$emit('focus')"
@blur="$emit('blur')"
@@ -111,6 +112,17 @@ export default {
this.onIconClick();
},
+ onKeypress(event) {
+ if (this.type === 'number') {
+ const { keyCode } = event;
+ const allowPoint = this.value.indexOf('.') === -1;
+ const isValidKey = (keyCode >= 48 && keyCode <= 57) || (keyCode === 46 && allowPoint);
+ if (!isValidKey) {
+ event.preventDefault();
+ }
+ }
+ },
+
adjustSize() {
const el = this.$refs.textarea;
el.style.height = 'auto';