Jquery和angularjs获取check框选中的值小技巧

在我们平常的开发中,有时候会需要获取一下check框选中的值,以及check框选中行的所有信息。这个时候有一个小技巧那就是我们可以把要获取的信息全部放到check框的值里面,这样我们可以获取check...

在我们平常的开发中,有时候会需要获取一下check框选中的值,以及check框选中行的所有信息。这个时候有一个小技巧那就是我们可以把要获取的信息全部放到check框的值里面,这样我们可以获取check框选中值的时候也就相当于获取了当前行的信息。


判断是否选中

$("input[type='checkbox']").is(':checked')
<td><input class="states" type="checkbox" name="orders" value="{{e.merchantId}},{{e.orderCode}},{{e.userId}}" /></td>

全选按钮 

<th><input class="states" type="checkbox" id="cboxchecked" ng-click="checkAll()" />全选</th>


全选全不选:

var bischecked=$('#cboxchecked').is(':checked');
var fruit=$('input[name="orders"]');
fruit.prop('checked',bischecked);

这里为什么要用prop而不用attr,这是因为

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。

对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

获取选中的值:

$('input[name="orders"]:checked').each(function(){
var sfruit=$(this).val();
var orders=sfruit.split(",");
var reminder=new Object();
reminder.merchantId=orders[0];
reminder.orderCode=orders[1];
reminder.userId=orders[2];
});


angularjs实现:

使用angularjs我们不用去操作dom,我们只需要去关心这个值的状态;

首先看一下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的这行代码作用可大了:<inputtype="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 ,而需要传入scope 。我们可以传入 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;
}
});


点击行的时候选中check框:

先再行上添加一个点击事件,把这个行个传到后台:

ng-click="checkTr(this)"


接着给当前单元格的check框赋值;

<td class="text-center"><label> <input type="radio" ng-model="check" value="{{e.docGuid}}" name="check"> </label></td>
$scope.checkTr=function(tr){
$scope.check=tr.e.docGuid;
};


自定义复选框对应的值

默认情况下,绑定到复选框上的值是ture或者false。有时候,我们希望返回的其它值。Angular提供了一种非常好的处理方式:使用ng-ture-value和ng-false-value。


我们添加另外一组复选框,不过这时侯我们使用的不再是true或者false,而是用户自定义的值。


<!-- CUSTOM VALUE CHECKBOXES -->
<label>Personal Question</label>
<div class="checkbox">
<label>
<input type="checkbox" name="awesome" ng-model="formData.awesome" ng-true-value="ofCourse" ng-false-value="iWish">
Are you awesome?
</label>
</div>


Angularjs全选全不选:

自己经过长时间的实践,总结出了一套自己使用Angularjs全选全不选的方式;

var app = angular.module('myApp', []);
app.controller('myCart', function($scope) {
$scope.cartList=[{
id:0,
image:"images/1.jpg",
name:"Casio/卡西欧 EX-TR350",
price:5999.88,
num:1,
total:5999.88,
check:false
},
{
id:1,
image:"images/2.jpg",
name:"Canon/佳能 PowerShot SX50 HS",
price:3888.50,
num:1,
total:3888.50,
check:false
},
{
id:2,
image:"images/3.jpg",
name:"Sony/索尼 DSC-WX300",
price:1428.50,
num:1,
total:1428.50,
check:false
},
{
id:3,
image:"images/4.jpg",
name:"Fujifilm/富士 instax mini 25",
price:640.60,
num:1,
total:640.60,
check:false
}]
$scope.checkAll=function(){ //全选全不选
for(var i in $scope.cartList){
$scope.cartList[i].check=$scope.all;
}
}
});
<table id="cartTable">
<thead>
<tr>
<th><label><input class="check-all check" type="checkbox" ng-click="checkAll()" ng-model="all" /> 全选</label></th>
<th>商品</th>
<th>单价</th>
<th>数量</th>
<th>小计</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="c in cartList">
<td class="checkbox"><input class="check-one check" type="checkbox" ng-model="c.check" /></td>
<td class="goods"><img src="{{c.image}}" alt="" /><span>{{c.name}}</span></td>
<td class="price">{{c.price}}</td>
<td class="count"><span class="reduce">-</span><input class="count-input" type="text" ng-model="c.num" /><span
class="add">+</span></td>
<td class="subtotal">{{c.total}}</td>
<td class="operation"><span class="delete">删除</span></td>
</tr>
</tbody>
</table>

我们会在列表的List对象里面添加一个check的参数,该参数默认是false,然后我们的check框model也取check的值,所以最开始的时候页面都是全不选的状态。当我点击全选全不选的时候就去调用checkAll方法,该方法会去循环的给集合赋值,$scope.all就是我们页面选择全选反选的状态,对应的集合值发生了变化,所以页面的选择状态也会发送变化。如果要取选择的值的话,直接去遍历集合cartList,然后判断一下check状态就可以了。非常简单适用。


你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
王凯
王凯

92 篇文章

作家榜 »

  1. admin 651 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. Garmcrypto7undop 0 文章