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 相关文章推荐
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
js禁止document element对象选中文本实现代码
Mar 21 Javascript
JS画5角星方法介绍
Sep 17 Javascript
javascript弹出层输入框(示例代码)
Dec 11 Javascript
jquery处理json对象
Nov 03 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
vue组件间通信子与父详解(二)
Nov 07 Javascript
iview中Select 选择器多选校验方法
Mar 15 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
vue实现列表拖拽排序的功能
Nov 02 Javascript
微信小程序中target和currentTarget的区别小结
Nov 06 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
Smarty中调用FCKeditor的方法
2014/10/27 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python的标准模块包json详解
2017/03/13 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python实现list由于numpy array的转换
2018/04/04 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
篮球比赛拉拉队口号
2014/06/10 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
导游词之五台山
2019/10/11 职场文书
django上传文件的三种方式
2021/04/29 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Linux中文件的基本属性介绍
2022/06/01 Servers