小程序实现单选多选功能


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 相关文章推荐
JS中style属性
Oct 11 Javascript
浅析JavaScript中的delete运算符
Nov 30 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
Mar 24 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
react native 仿微信聊天室实例代码
Sep 17 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
类似框架的js代码
2006/11/09 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python单元测试简单示例
2018/07/03 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
python+pygame实现坦克大战
2019/09/10 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
java关于string最常出现的面试题整理
2021/01/18 Python
cf搞笑广告词
2014/03/14 职场文书
建筑节能汇报材料
2014/08/22 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
搞笑老公保证书
2015/02/26 职场文书
自荐信大全
2019/03/21 职场文书
七年级作文之冬景
2019/11/07 职场文书