单选

当我们用v-for渲染一组数据的时候,我们可以带上index以便区分他们我们这里利用这个index来简单地实现单选


  1. <li v-for="(item,index) in radioList" :key="index" :class="selectedNum==index?'active':''" @click="select(index)">{{item}}</li>

首选定义一个selectedNum,当我们点击item时,便把这个selectedNum更改为我们所点击的item的index,然后每个item上加入判断selectedNum是不是等于自己,如果等于则选中。
相当于每个人有一个编号,鼠标点击生成了一个中奖号码,然后每个人自己去判断这个中奖号码是不是自己,如果是自己,哇,不得了~

代码如下:


  1. data() {
  2. return {
  3. selectedNum:"",
  4. radioList: ["某个元素", "某个元素", "某个元素", "某个元素", "某个元素"],
  5. };
  6. },
  7. methods: {
  8. //单选
  9. select(i) {
  10. this.selectedNum = i;
  11. },
  12. }

多选

多选的原理和单选一样,只不过这次我们要维护的是一个数组,不是单个的selectedNum


  1. <li v-for="(item,index) in checkboxList" :key="item" :class="checkbox.includes(index)?'active':''" @click="check(index)">{{item}}</li>

同样是利用index~同样是选中奖的人,不过这次中奖的人很多,我们点击一次就有一个人中奖,如果这个人的index出现在我们的中奖名单checkbox上,那他就是天选之人了~
写成代码就是点击一次push一次index到checkbox中,如果这个checkbox中有这个index了那就不要它了,实现了点一次选中再点一次取消。


  1. //多选
  2. check(i){
  3. var idx = this.checkbox.indexOf(i);
  4. //如果已经选中了,那就取消选中,如果没有,则选中
  5. if(idx>-1){
  6. this.checkbox.splice(idx,1);
  7. }else{
  8. this.checkbox.push(i);
  9. }
  10. },

接下来我们写一下全选,全取消,反选的实现。


  1. //选中全部
  2. checkAll(){
  3. //中奖的人就这么多,而且他们的index都是0到length-1的(v-for渲染),一顿数组基本操作即可
  4. var len = this.checkboxList.length;
  5. this.checkbox = [];
  6. for(var i=0;i<len;i++){
  7. this.checkbox.push(i);
  8. }
  9. },
  10. //清空选择
  11. clearCheckbox(){
  12. this.checkbox = [];
  13. },
  14. //反选
  15. checkOpposite(){
  16. var len = this.checkboxList.length;
  17. var idx;
  18. for(var i=0;i<len;i++){
  19. idx = this.checkbox.indexOf(i)
  20. //已经选中的删去,没选中的加进去
  21. if(idx>-1){
  22. this.checkbox.splice(idx,1);
  23. }else{
  24. this.checkbox.push(i);
  25. }
  26. }
  27. }

很多时候 全选 和 全部取消 只要一个按钮实现,这样我们就需要来判断它是不是已经全部选满了。在computed中自动计算是否全选。


  1. <button @click="letsGetThisFuckingCheck">{{isCheckAll?'取消全选':'选择全部'}}</button>
  2. computed: {
  3. //判断是否全部选中
  4. isCheckAll(){
  5. if(this.checkbox.length==this.checkboxList.length){
  6. return true;
  7. }
  8. return false;
  9. }
  10. },

然后我们只需要给这个双功能按钮绑定一个这样的功能即可

  1. letsGetThisFuckingCheck(){
  2. //如果全选,就是清空选择;如果不是,那就全都安排一下
  3. if(this.isCheckAll){
  4. this.clearCheckbox();
  5. }else{
  6. this.checkAll()
  7. }
  8. },

展示

上gif演示图(假装这个是gif,其实你们能想象的出来什么效果的吧)

完整代码


  1. <template>
  2. <div>
  3. <p>单选框</p>
  4. <ul>
  5. <li v-for="(item,index) in radioList" :key="index" :class="selectedNum==index?'active':''" @click="select(index)">{{item}}</li>
  6. </ul>
  7. <p>多选框</p>
  8. <ul>
  9. <li v-for="(item,index) in checkboxList" :key="item" :class="checkbox.includes(index)?'active':''" @click="check(index)">{{item}}</li>
  10. </ul>
  11. <button @click="letsGetThisFuckingCheck">{{isCheckAll?'取消全选':'选择全部'}}</button>
  12. <button @click="checkOpposite">反选</button>
  13. </div>
  14. </template>
  15. <script>
  16. export default {
  17. components: {},
  18. data() {
  19. return {
  20. selectedNum:"",
  21. radioList: ["某个元素", "某个元素", "某个元素", "某个元素", "某个元素"],
  22. checkbox:[],
  23. checkboxList:["某个元素", "某个元素", "某个元素", "某个元素", "某个元素","某个元素", "某个元素"],
  24. };
  25. },
  26. computed: {
  27. //判断是否全部选中
  28. isCheckAll(){
  29. if(this.checkbox.length==this.checkboxList.length){
  30. return true;
  31. }
  32. return false;
  33. }
  34. },
  35. methods: {
  36. //单选
  37. select(i) {
  38. this.selectedNum = i;
  39. },
  40. //多选
  41. check(i){
  42. var idx = this.checkbox.indexOf(i);
  43. //如果已经选中了,那就取消选中,如果没有,则选中
  44. if(idx>-1){
  45. this.checkbox.splice(idx,1);
  46. }else{
  47. this.checkbox.push(i);
  48. }
  49. },
  50. letsGetThisFuckingCheck(){
  51. if(this.isCheckAll){
  52. this.clearCheckbox();
  53. }else{
  54. this.checkAll()
  55. }
  56. },
  57. //选中全部
  58. checkAll(){
  59. var len = this.checkboxList.length;
  60. this.checkbox = [];
  61. for(var i=0;i<len;i++){
  62. this.checkbox.push(i);
  63. }
  64. },
  65. //清空选择
  66. clearCheckbox(){
  67. this.checkbox = [];
  68. },
  69. //反选
  70. checkOpposite(){
  71. console.log(1)
  72. var len = this.checkboxList.length;
  73. var idx;
  74. for(var i=0;i<len;i++){
  75. idx = this.checkbox.indexOf(i)
  76. //已经选中的删去,没选中的加进去
  77. if(idx>-1){
  78. this.checkbox.splice(idx,1);
  79. }else{
  80. this.checkbox.push(i);
  81. }
  82. }
  83. }
  84. }
  85. };
  86. </script>
  87. <style scoped>
  88. li{
  89. display: inline-block;
  90. font-size: 16px;
  91. padding: 5px;
  92. background-color: #e6e6e6;
  93. margin: 5px 10px;
  94. cursor: pointer;
  95. }
  96. .active {
  97. border: 2px solid red;
  98. }
  99. </style>

来源:https://segmentfault.com/a/1190000016313367

vue实现单选多选反选全选全不选的更多相关文章

  1. html中全选反选

    <!--第一层--> <div class="first"> <div class="first_top"> <img ...

  2. BootStrapt iCheck表单美化插件使用方法详解(含参数、事件等) 全选 反选

    特色: 1.在不同浏览器(包括ie6+)和设备上都有相同的表现 — 包括 桌面和移动设备 2.支持触摸设备 — iOS.Android.BlackBerry.Windows Phone等系统 4.方便 ...

  3. Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮

    效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...

  4. jquery checkbox选中状态以及实现全选反选

    jquery1.6以下版本获取checkbox的选中状态: $('.ck').attr('checked'); $('.ck').attr('checked',true);//全选 $('.ck'). ...

  5. checked 全选 反选 示例

    不多说看例子: 右上侧全选,然后每个栏又有一个栏目全选. 反选解决办法: function selectSubscibe(_class) { $("." + _class + &q ...

  6. JavaScript、全选反选-课堂笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. JQuery实现列表中复选框全选反选功能封装

    我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如: 我当时就是简单的实现了,然后想封装到公共的js中,封装的太烂,不好意思贴出来了(就是把实现代码之间放到公共js中,然后每个页面都用固定的 ...

  8. 关于input全选反选恶心的异常情况

    上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...

  9. jQuery全选/反选checkbox

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. python: jquery实现全选 反选 取消

    引入这个jquery-1.12.4.js jquery实现全选 反选 取消 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...

随机推荐

  1. linux命令dhclient

    linux命令 dhclient 背景 多台服务器(CentOS7 系统)设置静态IP,其中有台服务器设置了静态IP后,只要重启就变更为其他的,但是配置文件并无改动. 使用命令 #自动获取IP dhc ...

  2. 标准C程序设计七---17

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  3. msp430项目编程44

    msp430综合项目---门禁控制系统44 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结

  4. Requests模拟登陆

    requests模拟登陆知乎网站 实例 # -*- coding: utf-8 -*- __author__ = 'CQ' import requests try: import cookielib ...

  5. How to fill the background with image in landscape in IOS? 如何使image水平铺满屏幕

    UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:self.view.frame];    [backgroundIm ...

  6. [转]Linux上程序执行的入口--Main

    main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口.那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么 ...

  7. 【转】LINUX 手动建立SWAP文件及删除

    如何在红帽 企业版Linux系统中添加swap文件? 解决方法: 1. 确定swap文件的大小,单位为M.将该值乘以1024得到块大小.例如,64MB的swap文件的块大小是65536. 2. 在ro ...

  8. Android studio 升级,不用下载完整版,完美更新到2.0

    Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ...

  9. dvm进程,linux进程,应用程序进程是否同一概念

    Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程,DVM只执行.dex的Dalv ...

  10. MySql视频教程——百度云下载路径

    百度云分享MySql视频教程给大家.祝大家事业进步! MySql视频教程:http://pan.baidu.com/s/1gdCHX79 password:n46i