小程序实现单选多选功能


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数据表格插件
Jul 17 Javascript
如何使用Javascript获取距今n天前的日期
Jul 08 Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
Aug 14 Javascript
easyui datagrid 键盘上下控制选中行示例
Mar 31 Javascript
用js闭包的方法实现多点标注冒泡示例
May 29 Javascript
JS实现文字向下滚动完整实例
Feb 06 Javascript
js字符串引用的两种方式(必看)
Sep 18 Javascript
Vue分页器实现原理详解
Jun 28 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
Mar 10 Javascript
JavaScript鼠标悬停事件用法解析
May 15 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 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
PHP伪静态写法附代码
2008/06/20 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
PHP中SESSION过期设置
2021/03/09 PHP
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
第一个Vue插件从封装到发布
2017/11/22 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python通过post提交数据的方法
2015/05/06 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
美容院经理岗位职责
2014/04/03 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
机械生产实习心得体会
2016/01/22 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书