elementui循环渲染的表单添加字段的校验

本文介绍了在使用ElementUI时遇到的循环渲染表单并进行字段校验的问题。在尝试通过this.$refs[("item" + index)].validate进行校验时,发现报错提示该方法不存在。解决方法是改用this.$refs["item"][0].validate进行调用。文中给出了具体的html代码、验证规则代码和提交时判断校验状态的处理方式。

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

循环渲染的表单,添加字段校验,提交表单时判断校验结果,使用this.$refs[(“item” + index)].validate会报错
this.$refs[(“item” + index)].validate is not a function
需要这么使用:
this.$refs[“item”][0].validate

下面是项目中的代码:

html代码

<el-form
	v-for="(item,index) in receiptInfoList"
	:key="index"
	:model="item"
	:ref="'item'+index"
	:rules="item.moneyRules"
	label-width="0">
	<el-row :gutter="10">
		<el-col :lg="2" :sm="8">
			<el-form-item :label="item.stageName" label-width="90px"></el-form-item>
		</el-col>
		<el-col :lg="4" :sm="8">
			<el-form-item prop='estimatedReceivable'>
				<el-input v-model="item.estimatedReceivable" :disabled="!item.editState"></el-input>
			</el-form-item>
		</el-col>
		<el-col :lg="4" :sm="8">
			<el-form-item>
				<el-date-picker :disabled="!item.editState" type="date" v-model="item.estimatedReceivableTime" style="width: 100%"></el-date-picker>
			</el-form-item>
		</el-col>
		<el-col :lg="4" :sm="8">
			<el-form-item>
				<el-date-picker :disabled="!item.editState" type="date" v-model="item.acceptanceTime" style="width: 100%"></el-date-picker>
			</el-form-item>
		</el-col>
		<el-col :lg="4" :sm="8">
			<el-form-item prop='actualReceivable'>
				<el-input :disabled="!item.editState" v-model="item.actualReceivable"></el-input>
			</el-form-item>
		</el-col>
		<el-col :lg="4" :sm="8">
			<el-form-item>
				<el-date-picker :disabled="!item.editState" type="date" v-model="item.actualReceivableTime" style="width: 100%"></el-date-picker>
			</el-form-item>
		</el-col>
		<el-col :lg="2" :sm="8">
			<div class="collectEdit" v-if="!item.editState">
				<el-button type="text" @click="openReceivableEdit(item)">编辑</el-button>
				<el-button type="text" class="deleteBtnClass" @click="deleteReceivable(item)">删除</el-button>
			</div>
			<div class="collectEdit" v-else>
				<el-button type="text" style="color: #00b83f" @click="updateReceivable(item,index)">保存</el-button>
				<el-button type="text" class="deleteBtnClass" @click="cancelReceivable">取消</el-button>
			</div>
		</el-col>
		<el-col :span="12" v-show="item.editState">
			<el-form-item label="收款条件" label-width="85px">
				<el-input type="textarea" v-model="item.receivableCondition"></el-input>
			</el-form-item>
		</el-col>
	</el-row>
</el-form>

验证规则代码

moneyRules:{
	'estimatedReceivable':[
		{required:true,trigger:'blur',message:'请输入计划收款'},
		{
			validator: (rule,value,cb)=>{
				let reg = /^[0-9]*[1-9][0-9]*$/
				if(!reg.test(value)){
					cb(new Error('请输入非零整数'))
				}else{
					cb()
				}
			},
			required:true,trigger:'blur'
		}
	],
	'actualReceivable':[
		// {required:false,trigger:'blur',message:'请输入实际收款'},
		{
			required:false,
			validator: (rule,value,cb)=>{
				// console.log(value,1111111111)
				if(value == '' || value == null){
					cb()
				}else{
					let reg = /^[0-9]*[1-9][0-9]*$/
					if(!reg.test(value)){
						cb(new Error('请输入非零整数'))
					}else{
						cb()
					}
				}
			},
			trigger:'change',
		}
	]
}

提交时判断校验状态

// 修改收款信息
updateReceivable(val,index){
	// console.log(val)
	// console.log('item'+index)
	let reff = 'item'+index
	this.$refs[reff][0].validate((valid) => {  //此处不加[0]会报错===》this.$refs[("item" + index)].validate is not a function
		console.log(valid);
		if(valid){
			val.actualTime = val.actualTime == null ?  null : moment(val.actualTime).format('YYYY-MM-DD')
			val.finishTime = val.finishTime == null ?  null : moment(val.finishTime).format('YYYY-MM-DD')
			val.estimatedReceivableTime = val.estimatedReceivableTime == null ?  null : moment(val.estimatedReceivableTime).format('YYYY-MM-DD')
			val.actualReceivableTime = val.actualReceivableTime == null ?  null : moment(val.actualReceivableTime).format('YYYY-MM-DD')
			
			this.$$api_project_updateReceivable({
				data: val,
				fn: () => {
					this.$message.success('提交成功')
					this.loadReceivableList()
				}
			})
		}
	})
	return false;
},
假设你有一个包含多个复选框的表单,你可以使用 Element UI 的 el-checkbox 组件来实现。要对这些复选框进行校验,可以使用 Element UI 的表单验证功能。 以下是一个示例,展示如何循环渲染复选框并对它们进行校验: ``` <template> <el-form :model="form" :rules="rules" ref="form" label-width="100px"> <el-form-item label="选择语言"> <el-checkbox-group v-model="form.languages"> <el-checkbox v-for="language in languages" :key="language.value" :label="language.value">{{ language.label }}</el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { languages: [] }, languages: [ { label: 'Java', value: 'java' }, { label: 'Python', value: 'python' }, { label: 'JavaScript', value: 'javascript' }, { label: 'C++', value: 'c++' } ], rules: { languages: [ { required: true, message: '请至少选择一种语言', type: 'array', min: 1 } ] } } }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单校验通过,可以提交表单数据 console.log(this.form.languages) } else { // 表单校验不通过,需要处理错误信息 console.log('校验不通过') } }) } } } </script> ``` 在这个示例中,我们使用了 el-checkbox-group 组件来绑定表单数据中的 languages 字段,使用 v-for 指令循环渲染复选框。在表单验证规则中,我们使用了 required 规则来保证至少选择一种语言,并设置了错误提示信息。在提交表单时,我们调用了表单的 validate 方法进行校验,如果校验通过,就可以提交表单数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值