小程序实现单选多选功能


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 面向对象全新理练之数据的封装
Dec 03 Javascript
JavaScript 里的类数组对象
Apr 08 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
js实现div在页面拖动效果
May 04 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
jQuery Validate 数组 全部验证问题
Jan 12 Javascript
JavaScript基础之AJAX简单的小demo
Jan 29 Javascript
js实现购物车功能
Jun 12 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
vue.js页面加载执行created,mounted的先后顺序说明
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
重置版战役片段
2020/04/09 魔兽争霸
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
jquery.ui.draggable中文文档
2009/11/24 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
个人简历自荐信
2013/12/05 职场文书
党员批评与自我批评
2014/02/12 职场文书
军训考核自我鉴定
2014/02/13 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
2014和解协议书范文
2014/09/15 职场文书
护理实习生带教计划
2015/01/16 职场文书
初三英语教学计划
2015/01/23 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
入党积极分子群众意见
2015/06/01 职场文书
体育委员竞选稿
2015/11/21 职场文书