小程序实现单选多选功能


Posted in Javascript onNovember 04, 2018

小程序的单选组件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{
 width: 550rpx;
 margin: 50rpx auto
}
 
.checkbox-con{
 margin-top: 40rpx;
 text-align: center
}
.checkbox{
 width: 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{
 width: 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
 },
})

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>
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
 },
})

最后上个效果截图

小程序实现单选多选功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
JavaScript 空位补零实现代码
Feb 26 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
Dec 19 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
jquery自定义右键菜单、全选、不连续选择
Mar 01 Javascript
你可能不知道的前端算法之文字避让(inMap)
Jan 12 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
关于JavaScript中高阶函数的魅力详解
Sep 07 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
Nov 14 Javascript
keep-alive保持组件状态的方法
Dec 02 Javascript
Vuex的基本概念、项目搭建以及入坑点
Nov 04 #Javascript
微信小程序实现登录注册tab切换效果
Dec 29 #Javascript
原生js实现淘宝放大镜效果
Oct 28 #Javascript
微信小程序如何获取手机验证码
Nov 04 #Javascript
微信小程序实现弹出层效果
May 26 #Javascript
微信小程序实现预览图片功能
Oct 22 #Javascript
详解如何使用koa实现socket.io官网的例子
Nov 04 #Javascript
You might like
PHP4实际应用经验篇(1)
2006/10/09 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
JS中的数组的sort方法使用示例
2014/01/22 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
python函数返回多个值的示例方法
2013/12/04 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python中正则表达式与模式匹配
2019/05/07 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
python实现飞机大战小游戏
2019/11/08 Python
python编写实现抽奖器
2020/09/10 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL