javascript使用avalon绑定实现checkbox全选


Posted in Javascript onMay 06, 2015

duplex双工绑定是avalon绑定里面最有趣的一个,因为它在内部帮开发者做了很多事,让开发者写的代码减少,代码更优雅。下面随便演示一个常见的checkbox全选。

要求:(老掉牙了,还是说一下)

1.勾选了全选框后,下面的子选框全被勾选;没勾选全选框,则子选框全部不勾选

2.子选框如果有一个未勾选,则取消全选框勾选;

3.子选框全部勾选,则勾选全选框

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
<style type="text/css">
  *{
    margin: 0;
    padding: 0;
  }
  #wrap{
    margin-left: 100px;
  }
  #wrap li{
    display: inline-block;
    *display: inline;
    zoom:1;
    vertical-align: middle;
  }
</style>
<script type="text/javascript" src='seed.js'></script>
</head>
<body>
  <div id='wrap' ms-controller='duplex'>
    <p><input type='checkbox' data-duplex-changed="select_all_cb" ms-duplex-checked='select_all'>全选</p>
    <ul>
      <li ms-repeat='list'>
        <input type='checkbox' ms-duplex-number="selected" ms-attr-value='el.id'>{{el.text}}
      </li>
    </ul>
    <p>选中项的id:{{selected}}</p>
  </div>
  <script type="text/javascript">
  require('avalon',function(avalon){
    var duplex=avalon.define('duplex',function(vm){
      vm.selected=[];//保存勾选的选项的id,方便传给后台
      vm.list=[{id:1,text:'aaa'},{id:2,text:'bbb'},{id:3,text:'ccc'},{id:4,text:'ddd'},{id:5,text:'eee'},{id:6,text:'fff'}];
      vm.select_all_cb=function(){//全选框change事件回调
        var list=duplex.list,selected=duplex.selected;
        if(this.checked){
          avalon.each(list,function(i,v){//循环保存着已经勾选选框的数据
            selected.ensure(v['id']);//如果里面没有当前选框的数据,就保存
          });
        }else
          selected.clear();//清空
      };
      vm.select_all=0;
    });
    duplex.selected.$watch('length',function(after){//监听保存数据数组的变化
      var len=duplex.list.length;      
      if(after==len)//子选框全部被勾选
        duplex.select_all=1;
      else//子选框有一个没有被勾选
        duplex.select_all=0;
    });
    avalon.scan();
  });
  </script>
</body>
</html>

效果

javascript使用avalon绑定实现checkbox全选

需要说明几点:

1.data-duplex-changed负责监听checkbox的变化,进而触发回调。

2.ms-duplex-number="selected"这个就是神器,selected数组是和子选项框同步的,互相影响。也就是说,selected数组的元素个数增加或减少,会更新相应子选项框的视图,反之亦然。

3.ms-duplex-*需要与checkbox value属性值的类型相同,否则无法同步视图。像这里,checkbox value值是数字,则用ms-duplex-number。

4.checkbox value属性值的类型有时不要想当然的去判定。本?啪陀龅焦??髅鞔雍筇ù??吹氖?d数字,却无法同步视图,最后改成ms-duplex-string才解决问题。所以'7'还是7,要判断清楚。

从这个小例子可以看到用avalon这类mvvc是多么的提升编码体验,如果不用,想想要写多少个for循环+if判断!

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
js比较日期大小的方法
May 12 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
不间断循环滚动效果的实例代码(必看篇)
Oct 08 Javascript
javascript 动态样式添加的简单实现
Oct 11 Javascript
详解jquery validate实现表单验证 (正则表达式)
Jan 18 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
javascript填充默认头像方法
Feb 22 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
js this 绑定机制深入详解
Apr 30 Javascript
js实现滑动触屏事件监听的方法
May 05 #Javascript
JS根据生日算年龄的方法
May 05 #Javascript
js改变Iframe中Src的方法
May 05 #Javascript
js网页滚动条滚动事件实例分析
May 05 #Javascript
jquery判断单选按钮radio是否选中的方法
May 05 #Javascript
JQuery中Bind()事件用法分析
May 05 #Javascript
JS判断字符串包含的方法
May 05 #Javascript
You might like
php木马攻击防御之道
2008/03/24 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
Python的Flask框架中web表单的教程
2015/04/20 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python列表切片用法示例
2017/04/19 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
促销活动计划书
2014/05/02 职场文书
体育活动总结范文
2014/05/04 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
检讨书范文300字
2015/01/28 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL