antd 表单自定义校验validator踩坑记录

antd 表单自定义校验validator踩坑记录


Antd版本:3.X

简略还原某一项任务:

1. 点击新增后弹出表单

在这里插入图片描述

2. 要求:
a) 两个输入框必填
b) 数值范围大于等于0
c) min为空时max输入框提示先输入min

在这里插入图片描述

部分代码如下:

// 其中一个输入框
<FormItem
	label="min Price(大于)"
	labelCol={{ span: 10 }}
	wrapperCol={{ span: 14 }}>
    {getFieldDecorator('maxPrice', {
		rules: [
        	{
            	required: true,
                message: '不能为空',
            },
            {
            	validator: this.validatorMax
            }
       	]
       	})(
    	<Input size="small" />
    )}
</FormItem>
// 自定义验证
validatorMax = (rule, value, callback) => {
        if (!this.state.curInputMin) {
            callback('请先输入最小值')
        }
        if (this.props.dataList1.length !== 0) {
            //如果输入的最小值大于最后一项的最大值
            if (this.state.curSectionIndex + 1 === this.props.dataList1.length && parseInt(value) <= parseInt(this.state.curInputMin)) {
                callback('请输入大于' + this.state.curInputMin + '的值')
            }
            if (parseInt(value) <= parseInt(this.state.curInputMin) ||(parseInt(value) > parseInt(this.props.dataList1[this.state.curSectionIndex+1 ].minPrice)) ) {
                callback('请输入' + this.state.curInputMin + '~' + this.props.dataList1[this.state.curSectionIndex + 1].minPrice + '内的值')
            }
            callback()
        }
        callback()
    }
3. 点击确认提交表单

问题来了,提交表单之后,form.validateFields回调函数一直没有被执行

// 提交表单
confirm=()=>{
	this.props.form.validateFileds((err,val)=>{
		coneole.log(val)
		...
	)
4.

检查了好久,控制台也没有报错。。。终于,在打印this.props.dataList1[this.state.curSectionIndex+1 ]的时候发现出现了值为空的情况,卡在了判断语句里,所以一直没有执行callback()跳出
在这里插入图片描述

解决方法:

在判断语句里加个且该值不为空的条件

自定义校验注意事项

1 在自定义校验callback必须被调用
2 callback(‘xxx’) 表示校验未通过、callback() 表示校验通过

在使用 Ant Design Vue 的 `a-form` 表单时,自定义校验器可以使用 `validator` 属性来指定。默认情况下,校验器会对表单项进行非空判断。如果你想要自定义校验器但不想进行非空判断,可以在校验器函数中手动判断。 例如,你可以定义一个自定义校验器函数来检查输入值是否为正整数: ```javascript const validatePositiveInteger = (rule, value, callback) => { if (value && !/^[1-9]\d*$/.test(value)) { callback(new Error('请输入正整数')) } else { callback() } } ``` 在这个例子中,我们首先判断了输入值是否存在,如果存在,再使用正则表达式来判断输入值是否为正整数,如果不是,则调用 `callback` 函数并传递错误信息。如果输入值是正整数,则调用 `callback` 函数并传递一个空参数,表示校验通过。 然后,你可以在表单项中使用这个自定义校验器,并在 `rules` 属性中指定它: ```html <a-form-item label="正整数"> <a-input v-model:value="value" /> </a-form-item> ``` ```javascript { data() { return { value: '' } }, setup() { const { validatePositiveInteger } = yourValidateFunctions const rules = { value: [ { required: true, message: '请输入值' }, { validator: validatePositiveInteger, message: '请输入正整数' } ] } return { rules } } } ``` 在这个例子中,我们在 `rules` 属性中定义了一个校验规则,其中包括了一个非空校验规则和一个自定义校验规则。当表单项的值发生变化时,Ant Design Vue 会自动触发这些校验规则,然后根据校验结果来显示错误信息或者提交表单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值