小程序实现单选多选功能

摘要:
applet的单选组件和复选框组件的样式只提供了变化的颜色,这显然不足以满足实际的项目需求,因此您可以自己模拟。脚注:小程序不支持dom1的操作。多个框的模拟实现:实现思路:想法非常简单。使用选中的属性绑定每个选项。类型为布尔型。单击以反转!

小程序的单选组件radio和多选组件checkbox的样式只提供更改颜色,这对实际项目中的需求显然是不够的,所以自己模拟实现一个。

踩坑点:小程序不支持操作dom

1、模拟实现多选框:

实现思路:思路非常简单,给每个选项绑定checked属性,类型为布尔值,点击取反即可

<!--wxml-->
<view class='wrap'>
 <view class='checkbox-con'>
 <checkbox-group bindchange="checkboxChange">
  <label class="{{item.checked?'checkbox checked':'checkbox'}}" wx:for="{{checkboxArr}}" bindtap='checkbox' data-index="{{index}}" wx:key="item.name">
  <checkbox value="{{item.name}}" checked="{{item.checked}}"/>{{item.name}}
  </label>
 </checkbox-group>
  <button type='primary' bindtap='confirm'>提交</button>
 </view>
</view>
/* wxss */
.wrap{
  550rpx;
 margin: 50rpx auto
}
  
.checkbox-con{
 margin-top: 40rpx;
 text-align: center
}
.checkbox{
  260rpx;
 height: 72rpx;
 line-height: 72rpx;
 font-size: 28rpx;
 color: #888888;
 border: 1rpx solid #CECECE;
 border-radius: 5rpx;
 display: inline-block;
 margin: 0 10rpx 20rpx 0;
 position: relative
}
.checked{
 color: #1A92EC;
 background: rgba(49,165,253,0.08);
 border: 1rpx solid #31A5FD;
}
.checkbox checkbox{
 display: none
}
.checked-img{
  28rpx;
 height: 28rpx;
 position: absolute;
 top: 0;
 right: 0
}
//js

Page({
 data: {
 checkboxArr: [{
  name: '选项A',
  checked: false
 }, {
  name: '选项B',
  checked: false
 }, {
  name: '选项C',
  checked: false
 }, {
  name: '选项D',
  checked: false
 }, {
  name: '选项E',
  checked: false
 }, {
  name: '选项F',
  checked: false
 }],
 },
 checkbox: function (e) {
 var index = e.currentTarget.dataset.index;//获取当前点击的下标
 var checkboxArr = this.data.checkboxArr;//选项集合
 checkboxArr[index].checked = !checkboxArr[index].checked;//改变当前选中的checked值
 this.setData({
  checkboxArr: checkboxArr
 });
 },
 checkboxChange: function (e) {
 var checkValue = e.detail.value;
 this.setData({
  checkValue: checkValue
 });
 },
 confirm: function() {// 提交
 console.log(this.data.checkValue)//所有选中的项的value
 },
})

效果展示图:

 小程序实现单选多选功能第1张

2、模拟实现单选框

思路:这个和多选差不多,区别就是需要在点击时清空其他项的选中状态,然后再把当前项设置为选中状态

代码也差不多

wxml的话就把check-group标签改为radio-group; js那边就在点击时多加个判断

<!--wxml-->
<view class='wrap'>
 <view class='checkbox-con'>
 <radio-group bindchange="radioChange">
  <label class="{{item.checked?'checkbox checked':'checkbox'}}" wx:for="{{checkboxArr}}" bindtap='radio' data-index="{{index}}" wx:key="item.name">
  <checkbox value="{{item.name}}" checked="{{item.checked}}"/>{{item.name}}
  </label>
 </radio-group>
  <button type='primary' bindtap='confirm'>提交</button>
 </view>
</view>
//js

Page({
 data: {
 checkboxArr: [{
  name: '选项A',
  checked: false
 }, {
  name: '选项B',
  checked: false
 }, {
  name: '选项C',
  checked: false
 }, {
  name: '选项D',
  checked: false
 }, {
  name: '选项E',
  checked: false
 }, {
  name: '选项F',
  checked: false
 }],
 },
 radio: function (e) {
 var index = e.currentTarget.dataset.index;//获取当前点击的下标
 var checkboxArr = this.data.checkboxArr;//选项集合
 if (checkboxArr[index].checked) return;//如果点击的当前已选中则返回
 checkboxArr.forEach(item => {
  item.checked = false
 })
 checkboxArr[index].checked = true;//改变当前选中的checked值
 this.setData({
  checkboxArr: checkboxArr
 });
 },
 radioChange: function (e) {
 var checkValue = e.detail.value;
 this.setData({
  checkValue: checkValue
 });
 },
 confirm: function() {// 提交
 console.log(this.data.checkValue)//所有选中的项的value
 },
})

效果展示图:

 小程序实现单选多选功能第2张

https://www.jb51.net/article/150127.htm

免责声明:文章转载自《小程序实现单选多选功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【使用 DOM】为DOM元素设置样式华为 HG526 破解实录(一)Cfg文件加解密工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

小程序开发-小程序页面间传递数据的方式

在小程序开发中,我们小程序的不同页面间经常需要传递一些数据。针对不同的数据要求,有几种不同的传递数据方式。 1. 页面跳转通过url传递数据 在使用wx.navigateTo或者wx.redirectTo的时候,可以将部分数据放在url里面,在新页面onLoad的时候获取且初始化。 //pageA.js // Navigate wx.navigateTo...

微笑小程序的几种跳转方式

微信小程序页面跳转 的几种方式 最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一、wx.navigateTo(OBJECT)    这是最普遍的一种跳转方式,其官方解释为:“保留当前页面,跳转到应用内的某个页面” 类似于html中的 window.location.href="http://t.zoukankan.com/ "eg:...

【最新揭秘】百度快收权限如何获得,教你一周快速获得快收权限

   对于百度快收权限,很多seo人员很懵,不知道这个怎么获得,看官方解释也很笼统。官方是这样说的:您的站点暂无快速收录权限,站点关联小程序并提交适配规则将有机会优先获得该权限。  但是有一部的人,加入了百度小程序,也一直迟迟未获得,那怎么办?今天我就教你,来!    加入百度小程序需要以下几步:     第一步:网站企业备案,并且在站点属性中加入关联主体...

小程序开发笔记【三】,评论、评论回复及消息通知实现

先看实现的效果图 评论及评论回复实现 分析 评论和评论回复可以设计成1张表也可以设计成2张表,根据使用场景的不同选择,这里我将评论和回复表设计成一张表,表结构如下 CREATE TABLE `tb_post_newcomment` ( `post_comment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '...

微信小程序: 使用本地缓存

参考:https://www.bilibili.com/video/BV1RK4y1v7zv?p=19&spm_id_from=pageDriver import { request } from "../../request/index.js"; //必须全路径 Page({ /** * 页面的初始数据 */data: {...

「微信云托管」首篇实战|极简DEMO入门

一、项目介绍 此项目基于微信云托管能力范围编写,构建了一个简单的 WEB 后端服务,统计 WEB 网页的访问日志,并保存至 serverless 形态的 mysql 数据库中,然后在小程序中调用服务接口,获得访问次数。 项目包含微信云托管在单体运行中的基础能力使用,包含基础容器、mysql、微信小程序调用等。 项目技术栈:后端服务(nodejs + exp...