input全选与单选(把相应的value放入隐藏域去)
框架是Jquery
需求是: 页面上有很多复选框,1.当我选择一项复选框时候 把对应的值放入到隐藏域去 2.当我反选的时候 把隐藏域对应的值删掉。3.当我全选的时候 页面上所有的选择框的值一起放到隐藏域去,反之。4.当我已全选时候 再删掉选择一项时候 只是把对应的一项值删掉。
当我全选的时候:
对应于
当我没有全选的时候
对应于
HTML代码如下:
<div class="container">
<div>全选<input type="checkBox" class="AllSelect"/></div>
<div>
<label><input type="checkbox" value="201399720559172" class="selector"/></label>
<label><input type="checkbox" value="201399720559173" class="selector"/></label>
<label><input type="checkbox" value="201399720559174" class="selector"/></label>
</div>
</div>
<input id="boxFrom" type="hidden" value=""/>
JS代码如下:
var callback = (function(){ function CheckBox(container){
var self = this; if(this instanceof CheckBox) { // 匹配传参数clickElem
if($.isPlainObject(container)){
this.container = container;
}else if(/^\./.test(container)){
this.container = $(container);
}else if(/^#/.test(container)){
this.container = $(container);
}else if($('.'+container)){
this.container = $('.'+container);
}else {
throw new Error('传递参数不符合!');
}
}else {
new CheckBox(container);
} $(this.container).click(function(e) {
var target = e.target;
if(target.type === 'checkbox' && $(target).hasClass('selector')) {
self.itemSelect(target);
}else if (target.type === 'checkbox' && $(target).hasClass('AllSelect')) {
self.allSelect(target);
}else {
new Error('没有找到相应的选项!');
}
});
} CheckBox.prototype = { constructor: CheckBox, _count: 0, // 计数器 _arr: [], _itemArrs: [], _selectLen: $('.selector').length, itemSelect: function(target){
var self = this,
itemVal;
if(target.checked){
target.checked = true;
self._count++; // 当选中最后一个时候 全选复选框也选择上
if(self._count >= self._selectLen) {
$('.AllSelect').attr('checked',true);
}
itemVal = $(target).attr('value'); self._arr.push(itemVal); self.request(self._arr);
}else {
target.checked = false; if(self._count <= 0){
self._count = 0;
}else {
self._count--;
}
if(self._count < self._selectLen) {
$('.AllSelect').attr('checked',false);
}
itemVal = $(target).attr('value');
if(self._arr.length > 0) {
for(var i = 0, ilen = self._arr.length; i < ilen; i+=1) {
if(itemVal == self._arr[i]) {
self.removeItem(self._arr[i],self._arr);
}
}
}
var curVal = self.unique(self._arr);
$('#boxFrom').attr('value',curVal);
}
},
// 索引 jquery1.8 indexof 会重新排序 所以没有用jquery indexof
indexOf: function(item,arr) {
if(Array.prototype.indexOf) {
return arr.indexOf(item);
}else {
for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
if(arr[i] == item) {
return i;
}else {
return -1;
}
}
}
},
// 从数组里面删除一项
removeItem: function(item,arr){
var self = this,
index = self.indexOf(item,arr);
if(index > -1) {
arr.splice(index, 1);
}
}, // 全选
allSelect: function(target){
var self = this;
if(target.checked) {
$('.selector').each(function(index,item){
item.checked = true;
var itemVal = $(item).attr('value');
self._arr.push(itemVal);
});
self.request(self._arr);
}else {
target.checked = false;
$('#boxFrom').attr('value','');
$('.selector').each(function(index,item){
item.checked = false;
self._count = 0;
self._arr = [];
});
}
}, //去掉数组重复项
unique: function(arr){
arr = arr || [];
var obj = {},
ret = [];
for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
var curItem = arr[i],
curItemType = typeof(curItem) + curItem;
if(obj[curItemType] !== 1) {
ret.push(curItem);
obj[curItemType] = 1;
}
}
return ret;
}, // 处理业务逻辑
request: function(arr){
var self = this;
if($.isArray(arr)){
var arr = self.unique(arr);
$('#boxFrom').attr('value',arr.join(','));
}else {
$('#boxFrom').attr('value',arr);
}
}
}; return CheckBox;
})(); //调用如下
new callback('.container');
第二种JS如下:
/**
* 全选 反选JS组件
* author tugenhua
* @time 2014-3-19
* @requires{jQuery}
* input复选框的结构 如:<input type="checkbox" data-id="" class="single-selector"/>
*/ function CheckBox(options) { this.config = {
allSelectId : '#j-checkbox', //全选ID
singleSelectCls : '.single-selector', // 单选class
noSelectId : '#j-no-checkbox', // 反选ID
hiddenId : '#boxFrom', // 隐藏域 存放id
singleCallBack : null, // 单选后回调函数
cancelCallBack : null, // 取消单选回调函数
allCallBack : null, // 全选后回调函数
noSelectCallBack : null // 反选后回调函数
}; this.cache = {
selectLen : 0
};
this._init(options); } CheckBox.prototype = {
constructor: CheckBox,
_init: function(options){
this.config = $.extend(this.config,options || {}); var self = this,
_config = self.config,
_cache = self.cache;
_cache.selectLen = $(_config.singleSelectCls).length; /*
* 全选功能
* 没有用事件代理
*/
$(_config.allSelectId).unbind().bind('click',function(e){
var target = e.target;
self._allSelect(target);
}); // 单选
$(_config.singleSelectCls).each(function(){
$(this).unbind().bind('click',function(e){
var target = e.target;
self._itemSelect(target);
})
}); // 反选
$(_config.noSelectId).unbind().bind('click',function(e){
var target = e.target;
self._noSelect(target);
});
},
_count: 0, // 计数器
_arr: [],
_itemArrs: [],
_itemSelect: function(target){
var self = this,
_config = self.config,
_cache = self.cache,
itemVal,
tagParent;
if(target.checked){
target.checked = true;
self._count++;
// 当选中最后一个时候 全选复选框也选择上
if(self._count >= _cache.selectLen) {
$(_config.allSelectId).attr('checked',true);
} itemVal = $(target).attr('data-id');
self._arr.push(itemVal);
self._request(self._arr); // 单选后 回调 参数为点击后的id
_config.singleCallBack &&
$.isFunction(_config.singleCallBack) &&
_config.singleCallBack(itemVal);
}else {
target.checked = false; if(self._count <= 0){
self._count = 0;
}else {
self._count--;
}
if(self._count < _cache.selectLen) {
$(_config.allSelectId).attr('checked',false);
$(_config.noSelectId).attr('checked',false);
}
itemVal = $(target).attr('data-id');
self._arr = self.unique(self._arr);
if(self._arr.length > 0) {
for(var i = 0, ilen = self._arr.length; i < ilen; i+=1) {
if(itemVal == self._arr[i]) {
self._removeItem(self._arr[i],self._arr);
}
}
}
self._request(self._arr);
// 取消单选后 回调 参数为点击后的id
_config.cancelCallBack &&
$.isFunction(_config.cancelCallBack) &&
_config.cancelCallBack(itemVal);
}
},
// 索引 jquery1.8 indexof 会重新排序 所以没有用jquery indexof
_indexOf: function(item,arr) {
if(Array.prototype.indexOf) {
return arr.indexOf(item);
}else {
for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
if(arr[i] == item) {
return i;
}else {
return -1;
}
}
}
},
// 从数组里面删除一项
_removeItem: function(item,arr){
var self = this,
index = self._indexOf(item,arr);
if(index > -1) {
arr.splice(index, 1);
}
},
// 全选
_allSelect: function(target){
var self = this,
_config = self.config,
tagParent,
itemVal;
$(_config.singleSelectCls).each(function(index,item){
item.checked = true;
itemVal = $(item).attr('data-id');
self._arr = self.unique(self._arr);
self._arr.push(itemVal);
});
self._request(self._arr); // 全选后 回调 参数为所有的id
_config.allCallBack &&
$.isFunction(_config.allCallBack) &&
_config.allCallBack(self.unique(self._arr));
},
// 反选
_noSelect: function(target){
var self = this,
_config = self.config;
$(_config.allSelectId).attr("checked",false);
$(_config.singleSelectCls).each(function(index,item){
if($(item).attr('checked') == 'checked') {
$(item).attr('checked',false);
var itemVal = $(item).attr('data-id');
self._arr = self.unique(self._arr);
if(self._arr.length > 0) {
for(var i = 0, ilen = self._arr.length; i < ilen; i+=1) {
if(itemVal == self._arr[i]) {
self._removeItem(self._arr[i],self._arr);
}
}
}
self._request(self._arr);
}else {
$(item).attr('checked',true);
var itemVal = $(item).attr('data-id'); self._arr.push(itemVal); var curVal = self.unique(self._arr);
$(_config.hiddenId).attr('value',curVal);
}
});
self._request(self._arr); // 反选后 回调 参数为所有的id
_config.noSelectCallBack &&
$.isFunction(_config.noSelectCallBack) &&
_config.noSelectCallBack(self.unique(self._arr));
},
//去掉数组重复项
unique: function(arr){
arr = arr || [];
var obj = {},
ret = [];
for(var i = 0, ilen = arr.length; i < ilen; i+=1) {
var curItem = arr[i],
curItemType = typeof(curItem) + curItem;
if(obj[curItemType] !== 1) {
ret.push(curItem);
obj[curItemType] = 1;
}
}
return ret;
},
// 处理业务逻辑
_request: function(arr){
var self = this,
_config = self.config;
if($.isArray(arr)){
var arr = self.unique(arr);
$(_config.hiddenId).attr('value',arr.join(','));
}else {
$(_config.hiddenId).attr('value',arr);
}
}
};
input全选与单选(把相应的value放入隐藏域去)的更多相关文章
- jq pagination分页 全选、单选的思考
$().pagination(总条数,配置项); 后端分页的跨页选择: 思路:把浏览过的页整体保存为,整体拥有 curPage(当前页码).allChoice(当前页是否全选).selected当前页 ...
- vue分页全选和单选操作
<!DOCTYPE html> <html> <head> <title>演示Vue</title> <style> ul,li ...
- 优秀前端工程师必备: 非常常用的checkbox的骚操作---全选和单选demo
提要: 前端开发的时候, 经常会遇到表格勾选, 单个勾选判断是否全选的事情.趁着有时间, 总结一下以备不时之需! 就像下面这个栗子: 1 源代码: h5 // 全选框 <input type=& ...
- angular实现表格的全选、单选、部分删除以及全部删除
昨天自己写了一小段js,在全选的时候有点儿小坑,然后,整理了一下.今天把它贴出来,希望以后还记得. 大家也可以去github上查看或下载:https://github.com/dreamITGirl/ ...
- checked 完整版全选,单选,反选
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...
- 页内多个input全选不干扰且只用一段代码。
//html内容 <body> <div id="d1"> <input type="checkbox" class=" ...
- 关于input全选反选恶心的异常情况
上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...
- 全选与单选chekbox的自定义实现(angular框架)
2017年7月4日,我原本可以像其他同时一样早点回家,玩几把王者荣耀,但是我没有,因为我选择留下来,写一篇博客. 项目中经常性的会遇到什么点击"全选"按钮,勾中所有"单选 ...
- jquery-防多店铺购物车结算全选,单选,及删除,价格计算
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
随机推荐
- 【15】模板方法模式(Template Method)
一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等.在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它.例如简 ...
- c++类内存分布解析
首先使用Visual Studio工具查看类的内存分布,如下: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内 ...
- php pdo对象使用详解: 连接数据库与exec方法
要使用pdo,首先需要开启pdo扩展,我这里已经开启了mysql的pdo扩展 ghostwu@dev:~$ php -m | grep pdo pdo_mysql ghostwu@dev:~$ 1,连 ...
- C#将图片存放到SQL SERVER数据库中的方法
本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法.分享给大家供大家参考.具体如下: 第一步: ? 1 2 3 4 5 6 7 8 9 10 //获取当前选择的图片 this.pictu ...
- 大数据java基础day01
day01笔记 1.==操作符和equals方法 equals方法存在于Object类中,所有类的equals方法都继承于Object 2.String类的常用方法 ①.replace()替换字符串 ...
- JS 为什么在涉及到模块开发this的时候使用类似 self = this 的形式 p7
JS 动态作用域(调用栈)实际上也没有准确说明的,大多数我们使用对多和认知上大多是词法作用域,但是this的机制跟动态作用域很像. var a = 2; function fn(){ console. ...
- 完美的nginx图片防盗链设置详解
一般,我们做好防盗链之后其他网站盗链的本站图片就会全部失效无法显示,但是您如果通过浏览器直接输入图片地址,仍然会显示图片,仍然可以右键图片另存为下载文件!依然可以下载?这样就不是彻底的防盗链了! [r ...
- Expo大作战(二十八)--expo sdk api之Speach(语音文字转换),Segment
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记
机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...
- COCOMOII
一.COCOMOII是什么 cocomo是 COnstructive COst MOdel(建设性成本估算模型)的缩写.最早是由Dr. Barry Boehm在1981年提出.是一种精确的.易于使用的 ...