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中“+”的陷阱深刻理解
Dec 04 Javascript
JS字符串截取函数实例
Dec 27 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
Javascript数组Array方法解读
Mar 13 Javascript
jQuery解析返回的xml和json方法详解
Jan 05 Javascript
jQuery中 bind的用法简单介绍
Feb 13 Javascript
JS实现异步上传压缩图片
Apr 22 Javascript
详解vue slot插槽的使用方法
Jun 13 Javascript
详解javascript常用工具类的封装
Jan 30 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 16 Javascript
js实现日历
Nov 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
终于听上了直流胆调频
2021/03/02 无线电
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
js实现会跳动的日历效果(完整实例)
2017/10/18 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue $router和$route的区别详解
2020/12/02 Vue.js
python snownlp情感分析简易demo(分享)
2017/06/04 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python 遍历pd.Series的index和value
2019/11/26 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
商场拾金不昧表扬信
2014/01/13 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
北京颐和园导游词
2015/01/30 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书