【问题标题】:Number rule is not working on the Input of ANTD数字规则不适用于 ANTD 的输入
【发布时间】:2020-06-21 16:26:38
【问题描述】:

我正在使用 Antd Forms 并输入:数字不起作用。

rules : {[
{type: number},
{len: 5}, // <<--- THIS ONE IS NOT WORKING
{max: 999} //<<< this one is working
]}

如您所见,我正在使用 InputNumber,我也在尝试使用 Input。

当我输入除数字以外的任何内容时,我想得到一个错误。 Antd有这个功能,但是我不能用。

注意:我不想使用 onChange 事件处理程序并将“validateStatus”设置为错误。

注意:我也不想使用 RegExp,因为我们的数据来自 JSON,我们不会对任何值进行硬编码。

任何帮助都会非常有帮助。谢谢。

我正在使用“antd”:“3.26.12”版本并使用类组件。

import React from 'react';
import ReactDOM from 'react-dom';
import 'antd/dist/antd.css';
import './index.css';
import {
  Form,
  Button,
  InputNumber,
  Input,  
  Row,
  Col,
} from 'antd';

class Demo extends React.Component {
  handleSubmit = e => {
    e.preventDefault();
    this.props.form.validateFields((err, values) => {
      if (!err) {
        console.log('Received values of form: ', values);
      }
    });
  };

  normFile = e => {
    console.log('Upload event:', e);
    if (Array.isArray(e)) {
      return e;
    }
    return e && e.fileList;
  };

  render() {
    const { getFieldDecorator } = this.props.form;
    const formItemLayout = {
      labelCol: { span: 6 },
      wrapperCol: { span: 14 },
    };
    return (
      <Form {...formItemLayout} onSubmit={this.handleSubmit}>

        <Form.Item label="InputNumber">
          {getFieldDecorator('input-number', { rule:[ {len : 5}]})(<InputNumber />)} //<<<<---
        </Form.Item>



        <Form.Item wrapperCol={{ span: 12, offset: 6 }}>
          <Button type="primary" htmlType="submit">
            Submit
          </Button>
        </Form.Item>
      </Form>
    );
  }
}

const WrappedDemo = Form.create({ name: 'validate_other' })(Demo);

ReactDOM.render(<WrappedDemo />, document.getElementById('container'));

【问题讨论】:

  • 对于任何阅读本文的人,我添加了一个solution to this exact problem here,它可以在不使用getFieldDecorator() 函数的情况下工作。令人沮丧的是,type=number 规则无法正常工作。

标签: javascript reactjs forms antd


【解决方案1】:

您没有使用正确的 API(rules 是一个对象数组),请参考 form docs 及其示例,另外,len 用于字符串,在 InputNumber 中无用,您可能只是使用max:

<Form.Item label="InputNumber">
  {getFieldDecorator('input-number', {
    rules: [
      {
        type: 'number',
        max: 999,
        message: 'The input is not a number, max = 999'
      }
    ]
  })(<InputNumber />)}
</Form.Item>

【讨论】:

  • 感谢您的回复。那我怎样才能实现邮政编码输入呢?感谢您的帮助。
  • 请再问一个问题,也被问过很多次了
  • 感谢您的帮助,但这就是我想知道如何在不使用 onChange 事件处理程序的情况下实现该功能。
  • @amy 查看我对very similar question 的回答。我的示例显示了邮政编码验证。希望对您有所帮助!
猜你喜欢
  • 2021-03-30
  • 2019-02-25
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2020-01-31
  • 2013-07-03
  • 2018-01-19
相关资源
最近更新 更多