小程序实现单选多选功能


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 相关文章推荐
一个tab标签切换效果代码
Mar 27 Javascript
读jQuery之十一 添加事件核心方法
Jul 31 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
Dec 19 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 Javascript
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
JQuery实现Ajax加载图片的方法
Dec 24 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
详解在网页上通过JS实现文本的语音朗读
Mar 28 Javascript
JavaScript的function函数详细介绍
Nov 20 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+mysql数据库实现无限分类的方法
2014/12/12 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
Javascript模块模式分析
2008/05/16 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
使用svg实现动态时钟效果
2018/07/17 Javascript
node后端服务保活的实现
2019/11/10 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
如何利用python生成MD5并去重
2020/12/07 Python
python 实现有道翻译功能
2021/02/26 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
外贸采购员求职的自我评价
2013/11/26 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
大连导游词
2015/02/12 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书