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 相关文章推荐
模拟select的代码
Oct 19 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
Jul 15 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
Aug 25 Javascript
JavaScript实现向右伸出的多级网页菜单效果
Aug 25 Javascript
Vue常用指令V-model用法
Mar 08 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
jQuery实现的事件绑定功能基本示例
Oct 11 jQuery
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
解决layui弹框失效的问题
Sep 09 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基础学习小结
2011/04/17 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
js判断变量是否空值的代码
2008/10/26 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python自定义异常实例详解
2017/07/11 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
python中加背景音乐如何操作
2020/07/19 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
法院实习人员自我鉴定
2013/09/26 职场文书
函授毕业生的自我鉴定
2013/11/26 职场文书
教师个人剖析材料
2014/02/05 职场文书
文秘大学生求职信
2014/02/25 职场文书
课外科技活动总结
2014/08/27 职场文书
财会专业大学生求职信
2014/09/26 职场文书
酒店温馨提示语
2015/07/14 职场文书
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL