uniapp uView表单校验中 单选框 Radio不管是否添加必填校验都会被校验!

11 篇文章 0 订阅
2 篇文章 0 订阅

问题

最近项目做一个微信小程序,在开发过程中遇到了一些问题,关于uniapp uView表单校验已经单选框 Radio的bug,记录一下。

发现

一、单选框Radio中传递的不是字符串

先看代码

<u-radio-group v-model="form.repeat" placement="row" @change="groupChange">
	<u-radio style="margin-right: 10px;" label="重复" name="1"> </u-radio>
	<u-radio style="margin-right: 10px;" label="不重复" name="0"> </u-radio>
</u-radio-group>

groupChange(val) {
	console.log(val, 1, '1')
},

如果不是字符串,会出现一下问题
在这里插入图片描述
数字会被转为字符串,这时候会出现问题!
解决方法

<u-radio-group v-model="form.repeat" placement="row" @change="groupChange">
	<u-radio style="margin-right: 10px;" v-for="(item, index) in list" :key="index" :label="item.label" :name="item.name"> </u-radio>
</u-radio-group>

list: [{
		label: '重复',
		name: 1
	},
	{
		label: '不重复',
		name: 0
	},
],
二、表单校验时单选框 Radio未加校验但是被校验了(不一定会触发)

解决方法
添加上校验即可,毕竟单选一定会有一个值。
当然有些需求是单选框可以为空,也就是不选(不显示),这时候最好用v-if,不要使用v-show!!!

完整代码
<template>
	<view class="content">
		<scroll-view scroll-top="0" scroll-y="true" class="scroll-Y">
			<view class="form-style">
				<uni-forms ref="form" :modelValue="form" :rules="rules" label-position="top" labelWidth="120px">
					<uni-forms-item label="姓名" name="name" required>
						<uni-easyinput v-model="form.name" placeholder="请输入姓名" />
					</uni-forms-item>
					<uni-forms-item label="是否重复" name="repeat">
						<u-radio-group v-model="form.repeat" placement="row">
							<u-radio style="margin-right: 10px;" label="重复" name="1"> </u-radio>
							<u-radio style="margin-right: 10px;" label="不重复" name="0"> </u-radio>
							<!-- <u-radio style="margin-right: 10px;" v-for="(item, index) in list" :key="index"
								:label="item.label" :name="item.name"> </u-radio> -->
						</u-radio-group>
					</uni-forms-item>
					<uni-forms-item>
						<button type="primary" @click="submit('form')">提交</button>
					</uni-forms-item>
				</uni-forms>
			</view>
		</scroll-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// list: [{
				// 		label: '重复',
				// 		name: 1
				// 	},
				// 	{
				// 		label: '不重复',
				// 		name: 0
				// 	},
				// ],
				form: {
					name: '', // 姓名
					repeat: 0, // 重复使用 1是 0否
				},
				// 校验规则
				rules: {
					name: {
						rules: [{
							required: true,
							errorMessage: '姓名不能为空'
						}]
					},
					// repeat: {
					// 	rules: [{
					// 		required: true,
					// 		errorMessage: '请选择状态'
					// 	}]
					// }
				}
			}
		},
		methods: {
			submit(ref) {
				this.$refs[ref].validate().then(res => {
					let obj = {
						name: this.form.name, // 姓名
						repeat: this.form.repeat, // 是否重复使用
					}
					this.$Api.sumbit(obj).then(
						res => {
							uni.showToast({
								title: `提交完成`
							})
							setTimeout(() => {
								uni.navigateBack({
									delta: 1
								})
							}, 1000)
						},
						err => {}
					)
				}).catch(err => {
					console.log('err', err);
				})
			}
		}
	}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuelong-ming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值