ant-design/components/form/demo/validate-basic.md

179 lines
4.8 KiB
Markdown
Raw Normal View History

2016-01-26 11:55:27 +08:00
# 表单校验
2016-01-21 16:23:35 +08:00
- order: 11
基本的表单校验例子。
---
````jsx
import { Button, Form, Input } from 'antd';
2016-01-22 14:31:08 +08:00
const createForm = Form.create;
2016-01-21 16:23:35 +08:00
const FormItem = Form.Item;
function noop() {
return false;
}
class BasicDemo extends React.Component {
getValidateStatus(field) {
const { isFieldValidating, getFieldError, getFieldValue } = this.props.form;
if (isFieldValidating(field)) {
return 'validating';
} else if (!!getFieldError(field)) {
return 'error';
} else if (getFieldValue(field)) {
return 'success';
}
}
handleReset(e) {
e.preventDefault();
this.props.form.resetFields();
}
handleSubmit(e) {
e.preventDefault();
2016-01-23 16:18:22 +08:00
this.props.form.validateFields((errors, values) => {
2016-01-21 16:23:35 +08:00
if (!!errors) {
console.log('Errors in form!!!');
return;
}
console.log('Submit!!!');
console.log(values);
});
}
userExists(rule, value, callback) {
if (!value) {
callback();
} else {
2016-01-23 16:18:22 +08:00
setTimeout(() => {
2016-01-21 16:23:35 +08:00
if (value === 'JasonWood') {
callback([new Error('抱歉,该用户名已被占用。')]);
} else {
callback();
}
}, 800);
}
}
checkPass(rule, value, callback) {
const { validateFields } = this.props.form;
if (value) {
validateFields(['rePasswd']);
}
callback();
}
checkPass2(rule, value, callback) {
const { getFieldValue } = this.props.form;
if (value && value !== getFieldValue('passwd')) {
callback('两次输入密码不一致!');
} else {
callback();
}
}
render() {
2016-02-01 10:23:06 +08:00
const { getFieldProps, getFieldError, isFieldValidating } = this.props.form;
2016-01-21 16:23:35 +08:00
return (
<Form horizontal form={this.props.form}>
<FormItem
label="用户名:"
labelCol={{ span: 7 }}
wrapperCol={{ span: 12 }}
2016-02-01 10:23:06 +08:00
hasFeedback
help={isFieldValidating('name') ? '校验中...' : (getFieldError('name') || []).join(', ')}>
2016-01-30 19:00:56 +08:00
<Input placeholder="实时校验,输入 JasonWood 看看"
{...getFieldProps('name', {
rules: [
{ required: true, min: 5, message: '用户名至少为 5 个字符' },
{ validator: this.userExists },
],
2016-02-01 10:23:06 +08:00
})} />
2016-01-21 16:23:35 +08:00
</FormItem>
<FormItem
label="邮箱:"
labelCol={{ span: 7 }}
wrapperCol={{ span: 12 }}
2016-01-30 19:00:56 +08:00
hasFeedback>
<Input type="email" placeholder="onBlur 与 onChange 相结合"
{...getFieldProps('email', {
validate: [{
rules: [
{ required: true },
],
trigger: 'onBlur',
}, {
rules: [
{ type: 'email', message: '请输入正确的邮箱地址' },
],
trigger: ['onBlur', 'onChange'],
}]
})} />
2016-01-21 16:23:35 +08:00
</FormItem>
<FormItem
label="密码:"
labelCol={{ span: 7 }}
wrapperCol={{ span: 12 }}
2016-01-30 19:00:56 +08:00
hasFeedback>
2016-01-22 14:56:33 +08:00
<Input type="password" autoComplete="off"
2016-01-30 19:00:56 +08:00
{...getFieldProps('passwd', {
rules: [
{ required: true, whitespace: true, message: '请填写密码' },
{ validator: this.checkPass.bind(this) },
],
})}
onContextMenu={noop} onPaste={noop} onCopy={noop} onCut={noop} />
2016-01-21 16:23:35 +08:00
</FormItem>
<FormItem
label="确认密码:"
labelCol={{ span: 7 }}
wrapperCol={{ span: 12 }}
2016-01-30 19:00:56 +08:00
hasFeedback>
2016-01-22 14:56:33 +08:00
<Input type="password" autoComplete="off" placeholder="两次输入密码保持一致"
2016-01-30 19:00:56 +08:00
onContextMenu={noop} onPaste={noop} onCopy={noop} onCut={noop}
{...getFieldProps('rePasswd', {
rules: [{
required: true,
whitespace: true,
message: '请再次输入密码',
}, {
validator: this.checkPass2.bind(this),
}],
})} />
2016-01-21 16:23:35 +08:00
</FormItem>
<FormItem
label="备注:"
labelCol={{ span: 7 }}
2016-01-30 19:00:56 +08:00
wrapperCol={{ span: 12 }}>
<Input type="textarea" placeholder="随便写" id="textarea" name="textarea"
{...getFieldProps('textarea', {
rules: [
{ required: true, message: '真的不打算写点什么吗?' },
],
})} />
2016-01-21 16:23:35 +08:00
</FormItem>
<FormItem wrapperCol={{ span: 12, offset: 7 }} >
2016-01-21 16:23:35 +08:00
<Button type="primary" onClick={this.handleSubmit.bind(this)}>确定</Button>
&nbsp;&nbsp;&nbsp;
<Button type="ghost" onClick={this.handleReset.bind(this)}>重置</Button>
</FormItem>
</Form>
);
}
}
2016-01-30 19:00:56 +08:00
BasicDemo = createForm()(BasicDemo);
2016-01-21 16:23:35 +08:00
ReactDOM.render(<BasicDemo />, mountNode);
````