单选多选提交问卷,代码示例

element中

需要对接口返回的数据进行分析。多选问题使用checkbox,单选题使用radio。

多选时可以绑定min/max来控制选择的个数

        <div class="" v-if="item2.allowMultipleVote == 1">
          <div class="title_radio">
            多选 [最少选择<span>{{ item2.leastSelectNumber }}</span
            >项,最多选择<span>{{ item2.maxSelectNumber }}</span
            >项]
          </div>
          <div class="choose_card">
            <el-checkbox-group
              v-model="selectedCheckboxItems"
              :min="Number(item2.leastSelectNumber)"
              :max="Number(item2.maxSelectNumber)"
            >
              <label v-for="(item3, index3) in item2.options" :key="index3">
                <el-checkbox
                  :label="item3.id"
                  :value="item3.id"
                  @change="handleCheckboxChange(item2.itemId)"
                  >{{ item3.dataOption }}</el-checkbox
                >
              </label>
            </el-checkbox-group>
          </div>
        </div>
        <div class="" v-else>
          <div class="title_radio">单选</div>
          <div class="choose_card">
            <el-radio-group v-model="selectedRadioItems">
              <label v-for="(item3, index3) in item2.options" :key="index3">
                <el-radio
                  :label="item3.id"
                  :value="item3.id"
                  @change="handleRadioChange(item2.itemId)"
                >
                  {{ item3.dataOption }}
                </el-radio>
              </label>
            </el-radio-group>
          </div>
        </div>

怎么收集选中的数据集合

因为是设计多选、单选、多个问题。所以要使用多维数组传给后端。

分别给多选和单选绑定方法,收集选中的值。

item是选中题目的id,itemOptionIds是题目的选项id,多选时itemOptionIds要穿数组。所以多选题v-model绑定的值是数组。

    // 单选按钮的操作
    handleRadioChange(value) {
      let newObj = {
        itemId: value,
        itemOptionIds: this.selectedRadioItems,
      };
      // 判断是否已经选择过当前选项
      let index = this.sumitInfoid.findIndex((item) => item.itemId === newObj.itemId);
      if (index !== -1) {
        this.sumitInfoid[index] = newObj;
      } else {
        this.sumitInfoid.push(newObj);
      }
      // console.log('单选按钮', this.sumitInfoid);
    },
    // 多选按钮的操作
    handleCheckboxChange(value) {
      console.log(value, this.selectedCheckboxItems, 'this.selectedCheckboxItems');
      let newObj = {
        itemId: value,
        itemOptionIds: this.selectedCheckboxItems,
      };
      let index = this.sumitInfoid.findIndex((item) => item.itemId === newObj.itemId);
      if (index !== -1) {
        this.sumitInfoid[index] = newObj;
      } else {
        this.sumitInfoid.push(newObj);
      }
      console.log('多选按钮', this.sumitInfoid);
    },

data定义的值

      sumitInfoid: [], // 最终要提交的选项数据
      selectedRadioItems: '', // 单选的选项数据
      selectedCheckboxItems: [], // 多选的选项数据

 uni中

uni中好像监听不到多选的最大值最小值,需要自己判断。其他地方同element

				<view class="" v-if="item2.allowMultipleVote == 1">
					<view class="title_radio">
						多选 [最少选择<text>{{item2.leastSelectNumber}}</text>项,最多选择<text>{{item2.maxSelectNumber}}</text>项]
					</view>
					<view class="choose_card">
						<checkbox-group @change="checkboxChange">
							<label v-for="(item3,index3) in item2.options" :key="index3">
								<checkbox :value="item2.itemId+'+'+item3.id" :checked="item3.isChecked != 0"
									style="transform:scale(0.8)" color="#00B893;" /><text>{{item3.dataOption}}</text>
							</label>
						</checkbox-group>
					</view>
				</view>
				<view class="" v-else>
					<view class="title_radio">
						单选
					</view>
					<view class="choose_card">
						<radio-group @change="radioChange">
							<label v-for="(item3,index3) in item2.options" :key="index3">
								<!-- 单选按钮 -->
								<radio class="radio_true" :value="item2.itemId+'+'+item3.id" :name="item3.dataOption"
									:checked="index3 === current" color="#00B893" style="transform: scale(0.8);" />
								<text>{{item3.dataOption}}</text>
							</label>
						</radio-group>
					</view>
				</view>
			// 投票选项更改
			radioChange: function(evt) {
				console.log(evt.detail.value);
				let value = evt.detail.value.split('+');
				let newObj = {
					itemId: value[0],
					itemOptionIds: [value[1]] // 注意这里将itemOptionIds包装在数组中
				};
				// 判断是否已经选择过当前选项
				let index = this.sumitInfoid.findIndex(item => item.itemId === newObj.itemId);
				console.log('index !== -1', index !== -1); // 输出结果
				if (index !== -1) {
					this.sumitInfoid[index] = newObj;
				} else {
					this.sumitInfoid.push(newObj);
				}
				// console.log('输出结果单选sumitInfoid', this.sumitInfoid); // 输出结果
			},

			// 投票选项更改
			checkboxChange: function(e) {
				let newObj = {
					itemId: '',
					itemOptionIds: [] // 注意这里将itemOptionIds包装在数组中
				};
				if (e.detail.value.length > 0) {
					let firstValue = e.detail.value[0];
					let parts = firstValue.split('+');
					newObj.itemId = parts[0]; // 获取id部分    
					// 遍历所有值并提取value部分  
					e.detail.value.forEach(value => {
						let parts = value.split('+');
						if (parts.length > 1) { // 确保有id和value两部分
							// 判断是否多选了
							let foundItem = this.voteItemList.find(item => item.itemId === newObj.itemId)
							let maxSelectNumber = foundItem.maxSelectNumber;
							if (newObj.itemOptionIds.length >= maxSelectNumber) {
								uni.showToast({
									title: '最多只能选择' + maxSelectNumber + '项',
									icon: 'none'
								})
								for (var i = 0, lenI = foundItem.options.length; i < lenI; ++i) {
									const item = foundItem.options[i];
									if (item.id == parts[1]) {
										this.$set(item, 'isChecked', 1)
										setTimeout(() => {
											this.$set(item, 'isChecked', 0)
										}, 500)
									}
								}
							} else {
								newObj.itemOptionIds.push(parts[1]); // 将value部分添加到values数组中  
							}
						}
					});
				}
				// 判断是否已经选择过当前选项
				let index = this.sumitInfoid.findIndex(item => item.itemId === newObj.itemId);
				if (index !== -1) {
					this.sumitInfoid[index] = newObj;
				} else {
					this.sumitInfoid.push(newObj);
				}
				// }
				// }
				// console.log('输出结果多选sumitInfoid', this.sumitInfoid); // 输出结果
			},

 页面展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/779406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新扣子(Coze)实战案例:使用图像流做超分,模糊图片秒变清晰,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

[笔记] 卷积 - 02 滤波器在时域的等效形式

1.讨论 这里主要对时域和频域的卷积运算的特征做了讨论&#xff0c;特别是狄拉克函数的物理意义。 关于狄拉克函数&#xff0c;参考这个帖子&#xff1a;https://zhuanlan.zhihu.com/p/345809392 1.狄拉克函数提到的好函数的基本特征是能够快速衰减&#xff0c;对吧&#xf…

Sharding-JDBC

一、概念&#xff1a; Sharding-JDBC是一个在客户端的分库分表工具。它是一个轻量级Java框架&#xff0c;在Java的JDBC层提供的额外服务。 ShardingSphere提供标准化的数据分片、分布式事务和数据治理功能。 二、架构图&#xff1a; ShardingRuleConfiguration 可以包含多个 T…

WEB编程-了解Tomcat服务器

第⼀章⽹络编程 1.1 概述 计算机⽹络&#xff1a;是指将地理位置不同的具有独⽴功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在⽹络 操作系统、⽹络管理软件及⽹络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 …

Python 获取tiktok视频评论回复数据 api接口

TIKTOK api接口 用于爬取tiktok视频评论回复数据 详细采集页面如图 https://www.tiktok.com/dailymail/video/7329872821990182190?qneural%20link&t1706783508149 请求API http://api.xxxx.com/tt/video/info/comment/reply?video_id7288909913185701125&comment_…

uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据@getIndex点击事件获取点击的地区下标和地区名

项目场景&#xff1a; uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据getIndex点击事件获取点击的地区下标和地区名 例如&#xff1a; 问题描述 官方给的文档有限&#xff0c;需要自己下载地图json数据然后自己渲染和编写鼠标悬浮显示内容以及获取点击地址…

Numpy矩阵运算

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Numpy概述 Numpy是Python的一个开源数值计算扩展库&#xff0c;主要用于存储和处理大型多维数组和矩阵&#xff0c;并且提供了大量的数学函数来操作这些数组。Numpy是Pytho…

为适配kubelet:v0.4 安装指定版本的docker

系统版本信息 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) iso 文件下载地址 https://vault.centos.org/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso0.4 版本的kubelet 报错信息记录 E0603 19:00:38.273720 44142 kubelet.go:734] Error synci…

昇思25天学习打卡营第1天|初识MindSpore

# 打卡 day1 目录 # 打卡 day1 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思 MindSpore 优势|特点 昇思 MindSpore 不足 官方生态学习地址 初识MindSpore 昇思 MindSpore 是什么&#xff1f; 昇思MindSpore 是全场景深度学习架构&#xff0c;为开发者提供了全…

昇思25天学习打卡营第5天|网络与模型相关要素探讨

目录 从 MindSpore 模块中导入nn和ops 定义模型类 模型层 nn.Flatten nn.Dense nn.ReLU nn.SequentialCell nn.Softmax 模型参数 从 MindSpore 模块中导入nn和ops 将 MindSpore 整个模块引入到当前的 Python 脚本里&#xff0c;方便后续运用 MindSpore 所提供的各类功能…

【ue5】虚幻5同时开多个项目

正常开ue5项目我是直接在桌面点击快捷方式进入 只会打开一个项目 如果再想打开一个项目需要进入epic 再点击启动就可以再开一个项目了

预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来

预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来 目录 预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.预测未来 | Matlab实现HMM隐马尔科夫时间序列预测未来 2.运行环境为Matlab2023b及以上&#xff1b; 3…

地级市数字经济指数、互联网用户数、数字金融普惠指数

2000-2022年地级市数字经济指数&#xff08;含控制变量&#xff09; 目录 数字经济如何改善环境污染 一、引言 二、文献综述 三、实证模型 四、数据来源 五、程序代码 六、运行结果 数字经济如何改善环境污染 摘要&#xff1a; 本论文旨在探讨数字经济对环境污染的改善作…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了&#xff0c;赶紧查询了一下发现自己顺利通过啦&#xff08;上午63&#xff0c;下午67&#xff0c;开心&#xff09;&#xff0c;因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过&#xff0c;本来想直接报名软考高级证书…

Thisjavabean对象数组

This 1.概念 this是一个对象this是一个构造函数 2.介绍 解决局部变量和成员变量命名冲突 this在面向对象-封装那一篇里&#xff0c;有被两个地方提及。 但我们先简单给一个例子&#xff1a; public Person(String name, String phone, String qqPassword, String bankCar…

踩坑:Unity导出WebGL发布到手机上竖屏时强制显示横屏

具体的适配问题 公司的项目需要将游戏导出WebGL 发布到Web平台 本以为是个很简单的事情 谁知道却被个横竖屏适配搞的头晕 毕竟只有大学浅浅的学了下HTML这门语言 出来工作后基本上都是在跟C# Lua打交道 言归正传 看看具体问题吧 游戏如果从横屏进入 基本上不会有什么适配问题…

Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友......

Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的 方式增长。第1周少了1个朋友&#xff0c;剩下的朋友数量翻倍&#xff1b;第2周少了2个朋友&#xff0c;剩下的朋友数量 翻倍。一般而言&#xff0c;第N周少了N个朋友&#xff0c;剩下的朋友数量翻倍…

HDF4文件转TIF格式

HDF4 HDF4&#xff08;Hierarchical Data Format version 4&#xff09;是一种用于存储和管理机器间数据的库和多功能文件格式。它是一种自描述的文件格式&#xff0c;用于存档和管理数据。 HDF4与HDF5是两种截然不同的技术&#xff0c;HDF5解决了HDF4的一些重要缺陷。因此&am…

Mean teacher are better role models-论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/pdf/1703.01780 3.数据集地址 CIFAR-10 https://www.cs.utoronto.ca/~kriz/cifar.html 论文摘要的翻译 最近提出的Temporal Ensembling方法在几个半监督学习基准中取得了最先进的结果。它维护每个训练样本的标签…

设计模式探索:策略模式

1. 什么是策略模式&#xff08;Strategy Pattern&#xff09; 定义 策略模式&#xff08;Strategy Pattern&#xff09;的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立于使用它的客户端而…