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 相关文章推荐
jquery 获取json数据实现代码
Apr 27 Javascript
javascript中判断一个值是否在数组中并没有直接使用
Dec 17 Javascript
JavaScript获得url所有参数键值表的方法
Mar 21 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
Cpage.js给组件绑定事件的实现代码
Aug 31 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
vue-cli3.0使用及部分配置详解
Aug 29 Javascript
JavaScript设计模式之享元模式实例详解
Jan 17 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 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表单转换textarea换行符的方法
2010/09/10 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
原生php实现excel文件读写的方法分析
2018/04/25 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
Python实现GIF图倒放
2020/07/16 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
韩国商务邀请函
2014/01/14 职场文书
大家访活动实施方案
2014/03/10 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers