表单循环校验

本文介绍了在使用uniapp开发过程中,如何实现在表单中支持无限新增且对每个新增表单进行实时校验的方法,包括使用v-for循环生成表单组件,并利用Promise.all处理多个表单验证的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uniapp写app的时候遇到的一个需求,表单可以无限新增,每个表单都要进行表单校验

如图:每点一次右边图标,表单新增一

解决办法:

<view class="" v-for="(item,index) in form" :key="index" >
//rules 校验规则
	<u--form :model="item" ref="uForm0" label-width='95' :rules='rules'>
    <u-form-item borderBottom label="编号" prop="appearanceNumber">
		<u-input type="text" placeholder='请输入' v-model="item.appearanceNumber" />
	</u-form-item>
    </u--form>
</view>

//校验事件	
onSubmit() {
//定义promises 变量接收每一个表单的校验结果,利用Promise.all特性去判断是否所有表单的校验都通过,如果都通过就继续往下执行,又不通过的就提示校验结果
				let promises = this.listData.map((item, index) => {
					return this.$refs.uForm0[index].validate().then(res => {
						return true;
					}).catch(res => {
						return false;
					});
				});
				Promise.all(promises).then(results => {
					const pass = results.every(result => result);
					if (pass) {
						this.addData()
					}
				}).catch(error => {});
			},

如果有其他更好的方法欢迎评论分享,谢谢大家

### 使用 Ant Design 实现循环表单校验 在 Ant Design 中实现循环表单并对其进行有效校验涉及几个关键步骤。这不仅包括创建动态字段,还需要设置合理的验证规则来确保数据的有效性。 对于动态添加或移除项的情况,`Form.List` 是一个非常有用的工具[^1]。此组件允许开发者轻松管理可变数量的子表单项集合。为了使这些项目能够被正确地校验,在定义每个输入控件时应指定 `rules` 属性,该属性接受一组用于描述预期输入条件的对象数组。 #### 动态表单实例中的校验逻辑 当构建具有重复结构(如列表)的形式时,可以通过遍历方式生成相应的 HTML 元素,并为每一个新增加的部分应用相同的校验规则: ```jsx import React from 'react'; import { Form, Input, Button } from 'antd'; const DynamicFieldSet = () => { const onFinish = (values) => { console.log('Received values of form:', values); }; return ( <Form name="dynamic_form_item" onFinish={onFinish}> <Form.List name="users"> {(fields, { add, remove }) => ( <> {fields.map(({ key, name, fieldKey, ...restField }) => ( <div key={key} style={{ marginBottom: 8 }}> <Form.Item {...restField} validateTrigger={['onChange', 'onBlur']} rules={[ { required: true, message: '请输入用户名!', }, ]} > <Input placeholder="username" /> </Form.Item> {/* 添加更多字段 */} <Button type="link" onClick={() => remove(name)}> 删除 </Button> </div> ))} <Button block onClick={() => add()} style={{ marginTop: 8 }}> 新增用户 </Button> </> )} </Form.List> <Form.Item> <Button type="primary" htmlType="submit"> 提交 </Button> </Form.Item> </Form> ); }; export default DynamicFieldSet; ``` 上述代码展示了如何利用 `Form.List` 来处理不确定长度的数据集,并且针对每一项都设置了必填项校验规则。每当点击“新增用户”按钮时会向表单中增加一个新的条目;而点击对应的“删除”链接则可以从当前显示的内容里移除该项。提交整个表单之前,所有可见的文本框都会依据设定好的规则来进行合法性检查[^2]。 #### 关键点总结 - **使用 `Form.List` 组件**:支持动态添加/移除表单项。 - **配置 `rules` 参数**:为各输入域提供必要的校验约束。 - **事件触发机制**:通过监听特定操作(比如改变焦点、失去焦点),适时启动校验流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值