Angular.JS判断复选框checkbox是否选中并实时显示


Posted in Javascript onNovember 30, 2016

首先来看看简单的效果图,如下所示:

Angular.JS判断复选框checkbox是否选中并实时显示

看一下html代码:

<!DOCTYPE html>
<html data-ng-app="App">
<head>
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
 <script src="script2.js"></script>
</head>
<body data-ng-controller="AddStyleCtrl">

 <div>Choose Tags</div> 
 <div>
  <div>You have choosen:</div>
  <hr>
  <label data-ng-repeat="selectedTag in selectedTags">
   (({{selectedTag}}))
  </label>
  <hr>
  <div data-ng-repeat="category in tagcategories">
   <div>{{ category.name }}</div>
   <div data-ng-repeat="tag in category.tags">
    <div>
     <input type="checkbox" id={{tag.id}} name="{{tag.name}}" ng-checked="isSelected(tag.id)" ng-click="updateSelection($event,tag.id)">
     {{ tag.name }}
    </div>
   </div>
   <hr>
  </div>
 </div>

<pre>{{selected|json}}</pre>
<pre>{{selectedTags|json}}</pre>

</body>
</html>

line2 定义了AngularJS App;

line4 引入angularjs脚本;

line5 引入自己写的script2.js脚本;

line7 指定控制器AddStyleCtrl

line13-15 实时显示已选标签给用户看;

line17-line26 使用双重循环列出数据库(本例中就存储在了controller的一个对象里)中的数据;

line21的这行代码作用可大了:<input type="checkbox" id={{tag.id}} name="{{tag.name}}" ng-checked="isSelected(tag.id)" ng-click="updateSelection($event,tag.id)">

存储了tag的id,name,利用isSelected(tag.id)来判断是否被checked,点击时候调用updateSelection($event,tag.id)方法;

如果想 ng-click 触发的函数里获取到该触发该函数的元素不能直接传入 this ,而需要传入 event。因为在Angularjs里面,这个地方的this是event。因为在Angularjs里面,这个地方的this是scope 。我们可以传入 event,然后在函数里面通过event,然后在函数里面通过event.target 来获取到该元素。

line29-30 是测试时候给自己看的,可以看到selected数组和selectedTags数组中的内容;

然后看看AngularJS代码:(script2.js)

/**
 * Created by zh on 20/05/15.
 */
// Code goes here

var iApp = angular.module("App", []);



iApp.controller('AddStyleCtrl', function($scope)
{
 $scope.tagcategories = [
  {
   id: 1,
   name: 'Color',
   tags: [
    {
     id:1,
     name:'color1'
    },
    {
     id:2,
     name:'color2'
    },
    {
     id:3,
     name:'color3'
    },
    {
     id:4,
     name:'color4'
    },
   ]
  },
  {
   id:2,
   name:'Cat',
   tags:[
    {
     id:5,
     name:'cat1'
    },
    {
     id:6,
     name:'cat2'
    },
   ]
  },
  {
   id:3,
   name:'Scenario',
   tags:[
    {
     id:7,
     name:'Home'
    },
    {
     id:8,
     name:'Work'
    },
   ]
  }
 ];

 $scope.selected = [];
 $scope.selectedTags = [];

 var updateSelected = function(action,id,name){
  if(action == 'add' && $scope.selected.indexOf(id) == -1){
   $scope.selected.push(id);
   $scope.selectedTags.push(name);
  }
  if(action == 'remove' && $scope.selected.indexOf(id)!=-1){
   var idx = $scope.selected.indexOf(id);
   $scope.selected.splice(idx,1);
   $scope.selectedTags.splice(idx,1);
  }
 }

 $scope.updateSelection = function($event, id){
  var checkbox = $event.target;
  var action = (checkbox.checked?'add':'remove');
  updateSelected(action,id,checkbox.name);
 }

 $scope.isSelected = function(id){
  return $scope.selected.indexOf(id)>=0;
 }
});

line6 定义了angular app;

line10 定义了控制器AddStyleCtrl;

line12-63 定义了 标签对象

line64,66 声明了$scope中的两个数组对象(可以合并为1个),分别用来存储tag的id和name;

line68-78 定义了updateSelected方法,这个方法会被updateSelection调用;

line69-72:如果add操作且 ‘数组[id]' 元素不存在,向数组中添加数据(id,name);

line73-77:如果remove操作且‘数组[id]' 元素存在,从数组中删除数据(id,name);

line80-84定义了updateSelection方法,这个方法会在html页面的checkbox被点击时调用;

line81通过$event变量来获取点击的dom元素;

line82通过checkbox的当前状态来决定是add操作还是remove操作;

line83调用updateSelected方法,更新数据;

line86-88定义了isSelected方法,用来判断ID为id的checkbox是否被选中,然后传值给页面的ng-checked指令;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问欢迎大家留言交流。

作者: ZH奶酪——张贺
Q Q: 1203456195
邮箱: cheesezh@163.com
出处: >http://www.cnblogs.com/CheeseZH/

Javascript 相关文章推荐
jQuery 表单验证扩展代码(一)
Oct 11 Javascript
javascript object array方法使用详解
Dec 03 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
js中indexof的用法详细解析
Dec 24 Javascript
JS设置cookie、读取cookie
Feb 24 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
jQuery实现广告条滚动效果
Aug 22 jQuery
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
微信小程序全选多选效果实现代码解析
Jan 21 Javascript
jquery简易手风琴插件的封装
Oct 13 jQuery
javascript中导出与导入实现模块化管理教程
Dec 03 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 #Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 #Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
Nov 30 #Javascript
浅析script标签中的defer与async属性
Nov 30 #Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 #Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 #Javascript
html判断当前页面是否在iframe中的实例
Nov 30 #Javascript
You might like
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
全面解析JavaScript中apply和call以及bind(推荐)
2016/06/15 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python xml解析实例详解
2016/11/14 Python
python中对数据进行各种排序的方法
2019/07/02 Python
Python读取YAML文件过程详解
2019/12/30 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
2014年公司迎新年活动方案
2014/02/24 职场文书
外国人聘用意向书
2014/04/01 职场文书
处级干部考察材料
2014/12/24 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
angular异步验证器防抖实例详解
2022/03/31 Javascript