小程序实现单选多选功能


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 相关文章推荐
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
Apr 13 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
JavaScript函数绑定用法实例分析
Nov 14 Javascript
详解webpack打包后如何调试的方法步骤
Nov 07 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
七行JSON代码把你的网站变成移动应用过程详解
Jul 09 Javascript
javascript中正则表达式语法详解
Aug 07 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 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下使用无限生命期Session的方法
2007/03/16 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
详解php的socket通信
2015/08/11 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
yii2安装详细流程
2018/05/23 PHP
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python实现合并两个排序的链表
2019/03/03 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
python中安装django模块的方法
2020/03/12 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
大专毕业生自我评价分享
2013/11/10 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
安全生产承诺书范文
2014/05/22 职场文书
电子信息工程自荐信
2014/05/26 职场文书
单位员工收入证明样本
2014/10/09 职场文书
如何写辞职书
2015/02/26 职场文书