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 1.7.2中getAll方法的疑惑分析
May 23 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
JavaScript实现数据类型的相互转换
Mar 06 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
Apr 21 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
利用Console来Debug的10个高级技巧汇总
Mar 26 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
Sep 26 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
npm qs模块使用详解
Feb 07 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操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
2019/08/30 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
八年级物理教学反思
2016/02/19 职场文书
用Python生成会跳舞的美女
2022/01/18 Python