小程序实现单选多选功能


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中找到子元素在父元素内相对位置的代码
Jul 21 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
实测jquery data()如何存值
Aug 18 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
jquery插件qrcode在线生成二维码
Apr 26 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
AngularJS入门教程之MVC架构实例分析
Nov 01 Javascript
原生JavaScript实现AJAX、JSONP
Feb 07 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
用Golang运行JavaScript的实现示例
Nov 25 Javascript
vue-cli3中配置alias和打包加hash值操作
Sep 04 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插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
javascript中键盘事件用法实例分析
2015/01/30 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
探究Python中isalnum()方法的使用
2015/05/18 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
单位委托书范本
2014/04/04 职场文书
爱耳日活动总结
2014/04/30 职场文书
说明书范文
2014/05/07 职场文书
工商管理本科生求职信
2014/07/13 职场文书
观看信仰心得体会
2014/09/04 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
北京故宫的导游词
2015/01/31 职场文书
python编写五子棋游戏
2021/05/25 Python
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android