小程序实现单选多选功能


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 相关文章推荐
javascript里的条件判断
Feb 27 Javascript
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
详解用vue.js和laravel实现微信授权登陆
Jun 23 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
简述JS控制台的使用
Jul 15 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
vue.js循环radio的实例
Nov 07 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
怎么使 Mysql 数据同步
2006/10/09 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
js闭包学习心得总结
2018/04/17 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
django Admin文档生成器使用详解
2019/07/22 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python dict的常用方法示例代码
2020/06/23 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
班组长工作职责
2013/12/25 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
清明节演讲稿
2014/05/27 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
出纳岗位职责范本
2015/03/31 职场文书
入党介绍人意见范文
2015/06/01 职场文书