checkbox在vue中的用法小结


Posted in Javascript onNovember 13, 2018

前言

关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样,之前对于vue中用到过的checkbox也只是别人写好的组件,这次在自己实现时走了很多坑,特意写这篇文章记录下来,给后来者提供一个参考

在这之前,先看看原生checkbox搭配jquery取值的用法

<input type="checkbox" name="hobby" value="游泳">游泳
    <input type="checkbox" name="hobby" value="健身">健身
    <input type="checkbox" name="hobby" value="旅游">旅游

    $(".section1 input[type=checkbox][name=hobby]").change(function(){
         var obj = document.getElementsByName("hobby");
     var check_val = [];
     for(k in obj){
      if(obj[k].checked){
        check_val.push(obj[k].value);
      }
     }
     $(".section1 .res").text(check_val);
      });

checkbox禁用

<input type="checkbox" name="hobby" value="游泳" checked disabled="true">游泳

在vue中checkbox用法

在vue中,v-model其实是checked语法糖,通过v-model来判断当前checkbox是否被选中, 它绑定一个数组,选中项的值会自动添加到数组中

<div>请选择你的爱好(vue)</div>
    <input type="checkbox" v-model="hobby2" value="游泳">游泳
    <input type="checkbox" v-model="hobby2" value="健身">健身
    <input type="checkbox" v-model="hobby2" value="旅游">旅游
    <div>你已选中:{{hobby2}}</div>
var vm = new Vue({
      el: '#app',
      data:{
        msg:'hello',
        hobby2:[]
      },
      created(){
        console.log('created')
      },
      method:{
        login:function(){
          alert(1)
        }
      }
    })

vue中checkbox禁用

假如我们要求选项至少选择一个值,我们来通过disabled来禁止用户取消点击选项

 这里主要是通过设置hobby2的值来控制checkbox选项的选中或取消

1.首先先将hobby2数组设置一个默认值hobby2:['游泳']

2.添加input点击事件

<input type="checkbox" v-model="hobby2" value="游泳" @click="handleClick">游泳
handleClick:function(ev){
          var that = this;
          setTimeout(function(){
            console.log('this.hobby2',ev.target.checked,that.hobby2.length,that.hobby2)
            if(!ev.target.checked){
              if(that.hobby2.length==1){
                that.lastcheckval = that.hobby2[0];
              }
              if(that.hobby2.length==0){
                that.hobby2.push(that.lastcheckval)
              }
            }
          },1)
        }

1.通过获取点击事件 ev.target.checked的值判断当前点击状态是取消还是选中

 如是取消状态,则判断当前hobby2长度为0时通过push将lastcheckval最后一个值添加进去,这样就无法取消最后一个选项

lastcheckval的值需要在hobby2数组长度为1时将选项值保存起来

setTimeout异步

这里的如果不使用setTimeout异步,当点击选中或者取消选项时,数组hobby2中的值还是上一个选项结果,为了保证一致添加setTimeout解决该问题

刚才我们通过控制v-model中hobby2的值来禁止用户取消最后一个选项,那如果我们要实现这样一个功能又如何做呢

1.用户最多只能选择2个选项 (交互效果:当当前选项长度为2时,用户去选择新的选项时,将第一个选项取消,依次类推)

 在checked为false时添加如下代码,判断hobby2长度大于2时,将第一个元素删除

if(that.hobby2.length>2){
                that.hobby2.splice(0,1);
              }

自定义checkbox样式

默认的checkbox样式十分丑陋,不同的浏览器展示效果也不一样,如果是设计出图的话,我们就需要自定义样式,
 结合vue checkbox选项禁用来自定义checkbox样式

原理

1.通过label标签将input包裹住通过label for绑定input id,当点击label时实际就是点击的input
将input设置opacity: 0;不可见

2.通过给div来设置checkbox的默认样式及选中状态样式

.section3 .checkboxlist{}
    .checkboxlist label{
        margin-left: 10px;
    }
    .checkboxlist .checkbox{
      display: inline-block;
      width: 14px;
      height: 14px;
      border: 1px solid #eee;
        margin-right: -20px;
    }
    .checkboxlist .checkbox.checked{
      background: blue;
    }
    .checkboxlist input{
      opacity: 0;
    }

checkbox选项选中状态checked类动态添加 ,判断hobby3中是否存在当前选项值来觉得是否绑定checked类

:class="hobby3.indexOf('游泳')!=-1?'checked':''"
<label for="游泳">
        <div class="checkbox" :class="hobby3.indexOf('游泳')!=-1?'checked':''"></div>
        <input type="checkbox" id="游泳" v-model="hobby3" value="游泳" @click="handleClick">游泳
      </label>
      <label for="健身">
        <div class="checkbox" :class="hobby3.indexOf('健身')!=-1?'checked':''"></div>
        <input type="checkbox" id="健身" v-model="hobby3" value="健身" @click="handleClick">健身
      </label>
      <label for="旅游">
        <div class="checkbox" :class="hobby3.indexOf('旅游')!=-1?'checked':''"></div>
        <input type="checkbox" id="旅游" v-model="hobby3" value="旅游" @click="handleClick">旅游
      </label>
      <label for="爬山">
        <div class="checkbox" :class="hobby3.indexOf('爬山')!=-1?'checked':''"></div>
        <input type="checkbox" id="爬山" v-model="hobby3" value="爬山" @click="handleClick">爬山
      </label>

总结

以上所述是小编给大家介绍的checkbox在vue中的用法总结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript静态的url如何传递
May 03 Javascript
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
JavaScript几种形式的树结构菜单
May 10 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
Nov 26 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
vue+Element中table表格实现可编辑(select下拉框)
May 21 Javascript
React父子组件间的传值的方法
Nov 13 #Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 #Javascript
详解如何用typescript开发koa2的二三事
Nov 13 #Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 #Javascript
koa源码中promise的解读
Nov 13 #Javascript
vue-router传递参数的几种方式实例详解
Nov 13 #Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 #Javascript
You might like
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python使用marshal模块序列化实例
2014/09/25 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
求职自荐书范文
2013/12/04 职场文书
房地产销售经理岗位职责
2014/01/01 职场文书
优秀教师演讲稿
2014/05/06 职场文书
领导班子对照检查材料
2014/09/22 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL