框架是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放入隐藏域去)的更多相关文章

  1. jq pagination分页 全选、单选的思考

    $().pagination(总条数,配置项); 后端分页的跨页选择: 思路:把浏览过的页整体保存为,整体拥有 curPage(当前页码).allChoice(当前页是否全选).selected当前页 ...

  2. vue分页全选和单选操作

    <!DOCTYPE html> <html> <head> <title>演示Vue</title> <style> ul,li ...

  3. 优秀前端工程师必备: 非常常用的checkbox的骚操作---全选和单选demo

    提要: 前端开发的时候, 经常会遇到表格勾选, 单个勾选判断是否全选的事情.趁着有时间, 总结一下以备不时之需! 就像下面这个栗子: 1 源代码: h5 // 全选框 <input type=& ...

  4. angular实现表格的全选、单选、部分删除以及全部删除

    昨天自己写了一小段js,在全选的时候有点儿小坑,然后,整理了一下.今天把它贴出来,希望以后还记得. 大家也可以去github上查看或下载:https://github.com/dreamITGirl/ ...

  5. checked 完整版全选,单选,反选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...

  6. 页内多个input全选不干扰且只用一段代码。

    //html内容 <body> <div id="d1"> <input type="checkbox" class=" ...

  7. 关于input全选反选恶心的异常情况

    上一篇讲到:第一次点击全选按钮input显示对勾,第二次则不显示,需要用prop来添加checked属性. 但是用prop会出现一个问题,对勾显示,而checked属性不会被添加(比如:$(" ...

  8. 全选与单选chekbox的自定义实现(angular框架)

    2017年7月4日,我原本可以像其他同时一样早点回家,玩几把王者荣耀,但是我没有,因为我选择留下来,写一篇博客. 项目中经常性的会遇到什么点击"全选"按钮,勾中所有"单选 ...

  9. jquery-防多店铺购物车结算全选,单选,及删除,价格计算

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

随机推荐

  1. java设计模式-----23、命令模式

    概念: Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数. 命令模式(Command Pattern)是一种 ...

  2. Apache poi 使用经验分享

    我在使用apache poi导入导出Excel做项目过程中,遇到了许许多多的问题,在此简单罗列. 1.xls和xlsx的区分:poi将2003以前和2007以后的excel封装成了两个不同的实现:HS ...

  3. python学习之老男孩python全栈第九期_day003作业

    1. 有变量name = "aleX leNb" 完成如下操作:(1) 移除 name 变量对应的值两边的空格,并输出处理结果name = ' aleX leNb 'print(n ...

  4. JS 相关记录(scrollTo,JSON)

    1. window.scrollTo window.scrollTo 有2种语法,比较常见的时候 window.scrollTo(x-coord,y-coord ),其中 x轴坐标与y坐标 第二种为 ...

  5. nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题

    由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...

  6. 用venv 配置不同的开发环境

    首先使用pip 命令安装 pip install virtualenv   (以下是使用win10 操作系统) 1: 在工作目录下创建一个文件夹 mkdir mypython_space 2:然后执行 ...

  7. css设计并排布局

    css code form#reset_password ul { list-style: none; margin: 0 0 20px 200px; padding:; } form#reset_p ...

  8. Bootstrap源码分析系列之核心CSS

    本节主要介绍核心CSS,从整体架构中的7个Less文件对应的源码分别进行分析 scaffolding.less 这个文件编译后的css文件(886~989行)其作用就像定义全局样式. //调整css盒 ...

  9. She Left Her Shoes

    She left her shoes, she took everything else, her toothbrush, her clothes, and even that stupid litt ...

  10. 关于npm run build打包后css样式中的图片失效的问题(如background)

    平时run dev都能正常显示的css背景图片在npm run build打包后竟然不显示了(写在标签对中的图片都可以正常显示),而且dist/static/img目录下是确实有这张图片的,于是查看打 ...