el-form表单项如何二选一必填?
  jtoDA4DFWJ1x 2023年12月06日 33 0

在表单方面有需求是两个必选一个为必填,一个必填值输入进去后自动清楚另一项校验

<template>
	<el-form ref="form" :model="form" :rule="rules">
  	<el-form-item label="名称" prop="name">
    	<input v-model="form.name" placeholder="请输入名称" />
    </el-form-item>
    <el-form-item label="昵称" prop="nickname">
    	<input v-model="form.nickname" placeholder="请输入昵称" />
    </el-form-item>
    
    <el-form-item>
    	<el-button @click="sub">提交</el-button>
    </el-form>
  </el-form>
</template>

<script>
	export default {
  	data(){
    	return {
      	form: {},
        rules:{
        	name: [{validator: this.validateName,trigger: 'blur'}],
          nickname: [{validator: this.validateName,trigger: 'blur'}],
        },
      }
    },
    methods: {
    	validateName(rule,value,callback) {
      	if(!this.form.name && !this.form.nickname) {
        	callback(new Error("名称和昵称至少填写一项"))
        } else if (this.form.name&&!/^([\u4e00-\u9fa5]{1,20}|[a-zA-Z\.\s]{1,20})$/.test(this.name)) {
        		callback(new Error("名称格式不对,支持中文或者英文(20位字符内)"));
        } else {
        	//如果一项已填取消另外一项的必填校验提示
        	if(this.name){//name已填取消nickname校验
          	this.$refs["form"].clearValidate('nickname');
          } else {//nickname已填取消name校验
          	this.$refs["form"].clearValidate('name');
          }
        }
        callback();//调用callback通过校验
      },
      sub() {
      	this.$refs["form"].validate((valid) => {
        	if(valid) {//校验通过
          	//接口请求等操作
          } else {
          	//校验未通过
             this.$message.error("请完善必填信息");
            return false;
          }
        })
      }
    },
  }
</script>
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月06日 0

暂无评论

jtoDA4DFWJ1x