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 相关文章推荐
使用jquery给input和textarea设定ie中的focus
May 29 Javascript
ASP SQL防注入的方法
Dec 25 Javascript
js实现的二分查找算法实例
Jan 21 Javascript
json格式数据的添加,删除及排序方法
Jan 21 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
图文详解JavaScript的原型对象及原型链
Aug 02 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
jQuery插件jsonview展示json数据
May 26 jQuery
vue-router实现编程式导航的代码实例
Jan 19 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
微信小程序实现滑动操作代码
Apr 23 Javascript
在vue中实现嵌套页面(iframe)
Jul 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
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
总结一些js自定义的函数
2006/08/05 Javascript
javascript引用对象的方法代码
2007/08/13 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
常用的javascript设计模式
2017/01/11 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
Python创建临时文件和文件夹
2020/08/05 Python
使用Python封装excel操作指南
2021/01/29 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
Ejb技术面试题
2015/04/29 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
开展创先争优活动总结
2014/08/28 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python