Skip to content

Commit 37ff8c7

Browse files
committed
fix(Form): 修复校验规则 required 无效的问题
在同时使用 type 和 required 校验时,required会无效 原因:使用的第三方库 async-validator 仅在值为 undefined 时才不会进行类型(type)校验 空字符串也会进行类型(type)校验,所以会校验不通过 close #856
1 parent c5676f5 commit 37ff8c7

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

src/behaviors/rules.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Schema from '../common/async-validator/index';
22
import validator from '../behaviors/validator';
3+
34
/**
45
* @param tipType String [toast , message , text]
56
*/
@@ -40,16 +41,16 @@ export default Behavior({
4041
} = this.data;
4142
if (!rules) return;
4243
// 如果rule 是单个object
43-
if(Object.prototype.toString.call(rules) === '[object Object]') {
44+
if (Object.prototype.toString.call(rules) === '[object Object]') {
4445
this.data.rules = [rules];
4546
}
4647

4748
this.data.rules.forEach(item => {
48-
if(!item.trigger) {
49+
if (!item.trigger) {
4950
item.trigger = [];
5051
return;
5152
}
52-
if(typeof item.trigger === 'string') {
53+
if (typeof item.trigger === 'string') {
5354
item.trigger = [item.trigger];
5455
return;
5556
}
@@ -69,7 +70,7 @@ export default Behavior({
6970

7071
const list = type ? rules.filter(item => {
7172
return item.trigger.indexOf(type) > -1;
72-
}): rules;
73+
}) : rules;
7374
const schema = new Schema({
7475
[rulesName]: list,
7576
});
@@ -88,6 +89,14 @@ export default Behavior({
8889

8990
if (!rules) return;
9091

92+
// 把空字符串设置为 undefined ,见 issue 856
93+
// async-validator 对空字符串会进行类型检查,与required会冲突
94+
Object.getOwnPropertyNames(value).forEach((key) => {
95+
if (value[key] === '') {
96+
value[key] = undefined
97+
}
98+
})
99+
91100
this.data.schema.validate(value, (errors) => {
92101
this.setData({
93102
errors: errors || []

0 commit comments

Comments
 (0)