uni-app实现简单的问卷调查 uni-app多选题与单选题逻辑

风涛姑娘_5825

风涛姑娘_5825

2026-05-18

957人浏览

原创

uni-app中单选题需用包裹并绑定v-model,值为字符串/数字;多选题须手动同步e.detail.value到数组并显式设置checked;提交前按类型校验空值,注意跨平台差异。

uni-app实现简单的问卷调查 uni-app多选题与单选题逻辑

uni-app中单选题如何绑定数据并响应选择

单选题的核心是让同一组选项共享一个 v-model,且每个选项的 value 值互不相同。uni-app 的 必须配合 使用,否则无法触发双向绑定。

常见错误:直接用 v-model 绑定到 上(无效),或忘记给 设置 name(部分平台如 H5 可能不报错但逻辑异常)。

  • 必须用 包裹所有
  • {{ item.label }} 中的 :value 要是字符串或数字(避免布尔/对象)
  • 初始值建议设为 '' 或 null,而不是 undefined,否则某些平台(如微信小程序)可能无法正确回显
  • 在 onRadioChange 里通过 e.detail.value 获取选中值,不是 e.target.value
<radio-group><label v-for="item in options" :key="item.value">
    <radio :value="item.value"></radio>
    {{ item.label }}
  </label>
</radio-group>

uni-app多选题怎么避免数组重复添加和状态错乱

多选题没有原生 的 v-model 自动同步机制(uni-app 的 仅触发事件,不自动更新数组),必须手动维护选中项数组。

典型问题:点击同一选项多次导致重复 push;取消勾选时未从数组中移除;初始渲染时 checkbox 未根据已有数据设置 checked 状态。

  • 用 checkbox-group @change="onCheckboxChange" 监听,e.detail.value 是当前所有被勾选的 value 字符串数组
  • 不要用 push/splice 手动增删,直接把 e.detail.value 赋值给你的响应式数组(如 this.selectedList = e.detail.value)
  • 必须显式设置 :checked="selectedList.includes(item.value)",否则初始态或切换后 UI 不同步
  • 确保 item.value 是唯一可比类型(推荐字符串或数字),避免用对象作为 value
<checkbox-group><label v-for="item in options" :key="item.value">
    <checkbox :value="item.value" :checked="selectedList.includes(item.value)"></checkbox>
    {{ item.label }}
  </label>
</checkbox-group>

提交前校验单选/多选题是否作答的通用写法

问卷提交不能只靠前端提示,但至少得拦截明显漏答。单选题判空看是否为 '' 或 null;多选题看数组长度是否为 0,但要注意「允许不选」和「必选」逻辑要分开处理。

uni-app
uni-app

uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。

下载

容易忽略点:表单里混有单选、多选、输入框时,校验逻辑分散易遗漏;使用 ref 手动聚焦失败(uni-app 中 focus() 在部分平台不生效)。

  • 把每道题的字段名(如 q1, q2_options)和校验规则(required: true)存在一个配置数组里,统一遍历
  • 单选字段:用 !this.formData.q1 判空(注意排除 0 这类合法值,可改用 ['', null, undefined].includes(this.formData.q1))
  • 多选字段:用 this.formData.q2_options.length === 0,别用 !this.formData.q2_options(数组永远真值)
  • 发现未答时,用 uni.showToast({ title: '第2题未作答', icon: 'none' }) 提示,不强行跳转或弹窗阻塞

不同平台下 radio/checkbox 样式与事件行为差异

uni-app 编译到微信小程序、H5、App 时, 和 的默认样式、点击热区、change 触发时机并不一致。比如 H5 下 label 包裹 radio 可点击整个区域,而小程序中只有 radio 圆圈本身响应,需额外加 style="display: flex; align-items: center" 优化体验。

最常踩的坑:在微信小程序真机调试时,@change 事件偶尔不触发 —— 多半是因为 没有包裹完整,或内部嵌套了非 元素(如 ),导致编译后结构异常。

  • 始终用 包裹 /,并在 label 上加 class="uni-label" 配合 uni-app 官方 CSS 库
  • 避免在 内写 v-if 或插槽内容,会导致节点丢失
  • H5 平台若需自定义图标,优先用 CSS 伪元素覆盖,而非替换标签;小程序平台建议用 uni-icons + 状态控制显隐
  • 测试阶段务必在真机(尤其 iOS 微信)上验证点击反馈和事件触发,模拟器可能掩盖问题

复杂点在于,一道题如果既支持单选又支持多选(比如用开关切换题型),就不能只靠组件类型区分逻辑,得把「题型」、「是否必答」、「当前值」都纳入响应式数据管理——这时候建议封装成一个 question-item 自定义组件,把校验、渲染、事件收口到内部。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2683

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5843

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6810

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6538

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

943

5

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

120

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习