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 Event学习第四章 传统的事件注册模型
Feb 07 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
Aug 09 Javascript
举例讲解JavaScript中关于对象操作的相关知识
Nov 16 Javascript
AngularJS基础 ng-href 指令用法
Aug 01 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
vue服务端渲染的实例代码
Aug 28 Javascript
vue实现密码显示隐藏切换功能
Feb 23 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
Rollup处理并打包JS文件项目实例代码
May 31 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
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判断文章里是否有图片的简单方法
2014/07/26 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
Python中常用的os操作汇总
2020/11/05 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
留学推荐信中文范文三篇
2014/01/25 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
家庭教育的心得体会
2014/09/01 职场文书
计划生育个人总结
2015/03/02 职场文书
义卖募捐活动总结
2015/05/09 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Go语言中的UTF-8实现
2021/04/26 Golang
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python