小程序实现单选多选功能


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 confirm选择判断
Oct 18 Javascript
js异常捕获方法介绍
Apr 10 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
js对文章内容进行分页示例代码
Mar 05 Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
Oct 11 Javascript
mui back 返回刷新页面的实例
Dec 06 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
Nov 30 Javascript
解决vue字符串换行问题(绝对管用)
Aug 06 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
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使用Mysql事务实例解析
2014/09/08 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
javascript 模拟点击广告
2010/01/02 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
Vue 实时监听窗口变化 windowresize的两种方法
2018/11/06 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python编程使用协程并发的优缺点
2018/09/20 Python
Python实现对adb命令封装
2020/03/06 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
部队反四风对照检查材料
2014/09/26 职场文书