uniapp(微信小程序如何使用单选框、复选框)

news/2024/11/12 3:31:10/

一、先看效果

二、数据结构

说明:selected用来记录每次用户选择的值,当是单选的时候属性中的selected属性需要设置成字符串,当是复选框的时候,此时选择的是数组,selected属性应设置为数组。type用来区分当前是单选还是复选。disabled属性是配合组件使用的,意思是是否禁用该选项,name属性用来将选项渲染给用户看,_name是根据我自己的业务需求设计的,我的需求是记录用户选择的每个选项,我需要根据用户的选项在表单上进行定位,最终生成pdf文件。(此处根据自己的需求进行设计)

	a: [{id: 1,quesName: '1.是否取得营业执照',checkboxList: [{name: '是',disabled: false,_name: '是'},{name: '否',disabled: false,_name: '否'}],type: 'radio',selected: ''},{id: 2,quesName: '2.是否开展广告活动',checkboxList: [{name: '是',disabled: false,_name: '是_1'},{name: '否',disabled: false,_name: '否_1'}],type: 'radio',selected: ''},{id: 3,quesName: '3.广告活动主体类型',checkboxList: [{name: '广告主',disabled: false,_name: '广告主'},{name: '广告经营者',disabled: false,_name: '广告经营者'},{name: '广告发布者',disabled: false,_name: '广告发布者'},{name: '广告代言人',disabled: false,_name: '广告代言人'}],type: 'checkbox',selected: []},{id: 4,quesName: '4.广告活动媒介',checkboxList: [{name: '电视',disabled: false,_name: '电视'},{name: '广播',disabled: false,_name: '广播'},{name: '报纸',disabled: false,_name: '报纸'},{name: '期刊',disabled: false,_name: '期刊'},{name: '户外',disabled: false,_name: '户外'},{name: '印刷品',disabled: false,_name: '印刷品'},{name: '互联网(其中:互联网门户网站',disabled: false,_name: '互联网门户网站'},{name: '搜索引擎平台',disabled: false,_name: '搜索引擎平台'},{name: '电子商务平台',disabled: false,_name: '电子商务平台'},{name: '其他)',disabled: false,_name: '其他'}],type: 'checkbox',selected: []}]

三、html骨架

此处使用了u-view组件中的u-radio和u-checkbox,此处需要注意样式,因为这个默认样式不美观,自己需要调整,css调整方法可以外部引入一个css文件,这种可以改变默认样式,其他方式自己探索。

		<!-- 单选框、复选框表单 --><view v-for="(item, index) in a" :key="item.id"><view class="quName">{{ item.quesName }}</view><u-radio-group v-if="item.type == 'radio'" v-model="item.selected" placement="row" @change="(value) => checkboxChange(value, item.id)"><u-radio:customStyle="{ marginLeft: '8px' }"v-for="(items, indexs) in item.checkboxList":key="indexs":label="items.name":name="items._name":disabled="items.disabled"></u-radio></u-radio-group><u-checkbox-group v-else v-model="item.selected" placement="row" @change="(value) => checkboxChange(value, item.id)"><u-checkbox:customStyle="{ marginLeft: '8px' }"style="margin-top: 5px"v-for="(items, indexs) in item.checkboxList":key="indexs":label="items.name":name="items._name":disabled="items.disabled"></u-checkbox></u-checkbox-group></view>

此处需要重点讲解@change="(value) => checkboxChange(value, item.id)"函数,该组件change函数默认是返回一个值,那就是当前用户选择的值,我们需要将用户选择的值设置到数据结构中的selected属性中,此处很多人可能会用一个疑惑,为什么在设置多选框的时候,是怎么将用户选择的值设置到对应的selected熟悉中呢,此处组件已经完美解决了这个问题,我们每次勾选多选框中的时候,每次触发checkboxChange函数的时候,返回的是一个数组,你勾选几个值就返回当前你勾选的值,这个值是一个数组,每次会根据当前题目的id赋值到对应的selected中去。

		checkboxChange(value, id) {this.a = this.a.map((item) => {if (item.id == id) {return { ...item, selected: value };}return item;});console.log(value, id);},

四、过滤数据

此处需要将用户选择的非空选项对应的_name值记录到一个数组中去

			let quesAndSeleted = [];this.a.map((item) => {if (Array.isArray(item.selected)) {quesAndSeleted = quesAndSeleted.concat(item.selected);} else {quesAndSeleted.push(item.selected);}});//数据过滤this.form.quesAndSeleted = quesAndSeleted.filter(item=>item!==null && item!==undefined && item!=="");

五、改变样式

在你自己的页面中导入import ‘…/…/…/css/form.css’;(为什么选择外部引入css呢?因为内部我尝试了修改不生效,可能需要使用css渗透,懒得试了)

form.css文件.u-radio-group--row.data-v-97ce24d6 {margin-top: 10px;
}
.u-checkbox-group--row.data-v-2ef8bac9 {display: flex;flex-direction: row;flex-wrap: wrap;/* margin-top: 10px; */
}
.data-v-c4a74aee{margin-top: 3px;
}.u-button--square.data-v-2bf0e569 {border-bottom-left-radius: 3px;border-bottom-right-radius: 3px;border-top-left-radius: 3px;border-top-right-radius: 3px;margin-bottom: 10px;width: 90vw;margin-top: 10px;
}

http://www.ppmy.cn/news/1517307.html

相关文章

qt 获取文件夹下及子文件夹所有exe文件

qt 获取文件夹下及子文件夹所有exe文件 &#xff0c;直接上代码 void findExeFiles(const QString &startDirectory) { QDir dir(startDirectory); // 文件过滤器&#xff0c;只选择.exe文件 dir.setFilter(QDir::Files | QDir::NoDotAndDotDot); dir.setNam…

在VSCode中使用REST Client插件调试HTTP接口

在 VSCode 中安装 REST Client 扩展程序。新建 test.http 文件。编写请求 请求编写格式可以查看 REST Client 扩展程序说明。点击“Send Request”发送请求 5. 等待请求完成查看响应 请求完成会自动打开响应结果。响应结果上面部分是响应头&#xff0c;下面部分是响应…

HTTPS证书怎么直接保护IP地址

在数字化时代&#xff0c;数据安全已经成为企业和个人不可忽视的重要议题。随着网络攻击手段的不断进化&#xff0c;传统的安全防护措施已经难以满足日益增长的安全需求。其中&#xff0c;HTTPS证书作为网站加密通信的基础工具&#xff0c;在保障用户隐私和数据安全方面发挥着至…

巴西游戏出海!Bigo Ads助力巴西休闲游戏APP营销广告策略

巴西是一个休闲游戏市场潜力巨大的国家&#xff0c;而Bigo Ads作为社交广告平台&#xff0c;可以为巴西的休闲游戏APP提供有效的广告策略。 首先&#xff0c;Bigo Ads可以通过准确的用户定位功能&#xff0c;帮助休闲游戏APP找到目标用户群体。通过分析用户的兴趣、行为和地理…

向量数据库 和 关系数据库的区别

向量数据库和关系数据库在架构和数据组织方式上有明显的区别。下面将详细解释向量数据库中的数据库、集合、数据、索引、分区等概念&#xff0c;以及它们之间的关系&#xff0c;并将其与 MySQL 这样的关系数据库中的数据库、表、列、索引等概念进行对比。 向量数据库的架构 数据…

一天完成论文初稿?来看看这10个大幅提升论文写作效率的原则

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 论文写作对于科研人员尤其重要&#xff0c;我们必须通过写作来获得学位&#xff08;例如&#xff0c;论文&#xff09;、分享我们的研究发现&#xff08;专业会议论文和摘要&a…

Chapter 05 计算属性

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、基础语法二、计算属性vs方法三、完整写法 前言 Vue.js 提供了丰富的功能&#xff0c;帮助开发者高效地构建用户界面。本篇文章详细讲解了其计算属性的基本语法、应用…

内存管理篇-14kmalloc机制实现分析

引入这个kmalloc的目的&#xff0c;是因为前面的slab接口太过于复杂&#xff0c;因此需要一个全新的封装kmalloc接口&#xff0c;内存申请编程接口实现。kmalloc底层起始也是基于slab缓存实现的。 1.kmalloc 调用流程 参数解析: 解析 gfp_mask 参数&#xff0c;确定分配时是否…