feat: scroll to invalid field automatically #993

This commit is contained in:
Benjy Cui 2016-02-16 10:13:40 +08:00
parent 7b608fe1e7
commit c8015c88c3
6 changed files with 15 additions and 8 deletions

View File

@ -2,9 +2,7 @@
- order: 12 - order: 12
提供以下组件表单域的校验。 提供以下组件表单域的校验:`Select` `Radio` `DatePicker` `InputNumber` `Cascader`。在 submit 时使用 `validateFieldsAndScroll`,进行校验,可以自动把不在可见范围内的校验不通过的菜单域滚动进可见范围。
`Select` `Radio` `DatePicker` `InputNumber` `Cascader`
--- ---
@ -23,7 +21,7 @@ let Demo = React.createClass({
handleSubmit(e) { handleSubmit(e) {
e.preventDefault(); e.preventDefault();
this.props.form.validateFields((errors, values) => { this.props.form.validateFieldsAndScroll((errors, values) => {
if (!!errors) { if (!!errors) {
console.log('Errors in form!!!'); console.log('Errors in form!!!');
return; return;

View File

@ -2,7 +2,7 @@ import Form from './Form';
import FormItem from './FormItem'; import FormItem from './FormItem';
import ValueMixin from './ValueMixin'; import ValueMixin from './ValueMixin';
import Input from '../input'; import Input from '../input';
import { createForm } from 'rc-form'; import createDOMForm from 'rc-form/lib/createDOMForm';
Form.create = (o = {}) => { Form.create = (o = {}) => {
const options = { const options = {
@ -11,7 +11,7 @@ Form.create = (o = {}) => {
fieldMetaProp: '__meta', fieldMetaProp: '__meta',
}; };
return createForm(options); return createDOMForm(options);
}; };
Form.Item = FormItem; Form.Item = FormItem;

View File

@ -75,6 +75,7 @@ CustomizedForm = Form.create({})(CustomizedForm);
| setFieldsValue | 设置一组输入控件的值 | Function(obj: object) | | | | setFieldsValue | 设置一组输入控件的值 | Function(obj: object) | | |
| setFields | 设置一组输入控件的值与 Error | Function(obj: object) | | | | setFields | 设置一组输入控件的值与 Error | Function(obj: object) | | |
| validateFields | 校验并获取一组输入域的值与 Error | Function([fieldNames: string[]], [options: object], callback: Function(errors, values)) | | | | validateFields | 校验并获取一组输入域的值与 Error | Function([fieldNames: string[]], [options: object], callback: Function(errors, values)) | | |
| validateFieldsAndScroll | 与 `validateFields` 相似,但校验完后,如果校验不通过的菜单域不在可见范围内,则自动滚动进可见范围 | 参考 `validateFields` | | |
| getFieldError | 获取某个输入控件的 Error | Function(name) | | | | getFieldError | 获取某个输入控件的 Error | Function(name) | | |
| isFieldValidating | 判断一个输入控件是否在校验状态 | Function(name) | | | | isFieldValidating | 判断一个输入控件是否在校验状态 | Function(name) | | |
| resetFields | 重置一组输入控件的值与状态,如不传入参数,则重置所有组件 | Function([names: string[]]) | | | | | resetFields | 重置一组输入控件的值与状态,如不传入参数,则重置所有组件 | Function([names: string[]]) | | | |

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import assign from 'object-assign'; import assign from 'object-assign';
import classNames from 'classnames';
function prefixClsFn(prefixCls, ...args) { function prefixClsFn(prefixCls, ...args) {
return args.map((s) => { return args.map((s) => {
@ -54,8 +55,12 @@ class Input extends React.Component {
</span> </span>
) : null; ) : null;
const className = classNames({
[`${props.prefixCls}-input-wrapper`]: true,
[wrapperClassName]: (addonBefore || addonAfter),
});
return ( return (
<span className={(addonBefore || addonAfter) ? wrapperClassName : ''}> <span className={className}>
{addonBefore} {addonBefore}
{children} {children}
{addonAfter} {addonAfter}

View File

@ -45,7 +45,7 @@
"rc-collapse": "~1.4.4", "rc-collapse": "~1.4.4",
"rc-dialog": "~5.3.1", "rc-dialog": "~5.3.1",
"rc-dropdown": "~1.4.3", "rc-dropdown": "~1.4.3",
"rc-form": "~0.12.1", "rc-form": "~0.13.0",
"rc-form-validation": "~2.5.0", "rc-form-validation": "~2.5.0",
"rc-input-number": "~2.4.1", "rc-input-number": "~2.4.1",
"rc-menu": "~4.10.2", "rc-menu": "~4.10.2",

View File

@ -21,6 +21,9 @@ label {
} }
// Input styles // Input styles
.@{css-prefix}input-wrapper {
display: block;
}
.@{css-prefix}input { .@{css-prefix}input {
.input; .input;
} }