JS全选功能代码优化

2014-06-26 00:00 by 龙恩0707, 470 阅读, 3 评论, 收藏, 编辑

JS全选功能代码优化

最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能来做个简单的demo,使用目前现在的编码方式来重新编码,当然以后会一直用这种方式来编写自己的代码。下面是如下代码:

JS所有代码:

/**
* JS全选
* @class Checkall
* @param {Object} cfg
* @param {Element|selector} [cfg.container] 限定全选的容器
* @param {selector} cfg.checkAll 全选框
* @param {selector} cfg.checkItem 子选框
*/
function CheckAll(cfg,callback) {
var self = this; this.config = cfg; this.container = $(cfg.container) || document.body; // 全选自定义事件
this.container.delegate(cfg.checkAll,'change',function(e){
$(e.target).trigger('checkAllChange');
}); // 单选自定义事件
this.container.delegate(cfg.checkItem,'change',function(e){
$(e.target).trigger('checkItemChange');
}); // 全选操作
this.container.delegate(cfg.checkAll,'checkAllChange',function(e){ var checked = self.isItemChecked(e.target); self._checkAll(checked); // 选中所有子节点
self._AllChildrenChecked(checked); callback && $.isFunction(callback) && callback(self);
}); // 单选操作
this.container.delegate(cfg.checkItem,'checkItemChange',function(e){ // 检查是否所有子节点都选中了
if( self._isChildrenChecked()){
self._checkAll(true);
}
else {
self._checkAll(false);
}
callback && $.isFunction(callback) && callback(self);
});
}; $.extend(CheckAll.prototype,{ /*
* 选中单个checkbox
* @param item
* @param _isCheck
*/
_checkItem: function(item, _isCheck ){
item = $(item);
item.prop('checked', _isCheck);
},
/*
* 选中/反选所有的 全选按钮
* @method _checkAll {private}
* @param {Boolean} _isCheck
*/
_checkAll: function(_isCheck){
var self = this;
this.container.find(self.config.checkAll).each(function(index,item){
var isAllChecked = self.isItemChecked(item);
if(isAllChecked !== _isCheck) {
self._checkItem(item,_isCheck);
}
});
},
/*
* 选中/反选 所有的子节点
* @method _AllChildrenChecked {private}
*/
_AllChildrenChecked: function(_isCheck){
var self = this;
this.container.find(this.config.checkItem).each(function(index,item){
var itemChecked = self.isItemChecked(item);
if( itemChecked !== _isCheck){
self._checkItem(item, _isCheck);
}
});
},
/*
* 是否所有的子节点都选中了
*/
_isChildrenChecked: function(){
var isCheckAll = true;
var self = this;
this.container.find(this.config.checkItem).each(function(index,item){
if(!self.isItemChecked(item)) {
isCheckAll = false;
}
});
return isCheckAll;
},
/*
* 检查一个元素是否被选中
*/
isItemChecked: function(item) {
return $(item).is(":checked");
},
/*
* 获取被选中的所有值 或者 属性 存入数组
* @todo 比如想获取选中所有项的id或者其他所有项的属性等操作
* @method getValues {public}
* @param {elems,attr} 元素所有的dom节点 获取元素对应的属性值
* @return 返回数组 {rets}
*/
getValues: function(elems,attr) {
var self = this,
rets = [];
$(elems).each(function(index,item){
var isboolean = self.isItemChecked(item);
if(isboolean && $(item).prop(attr)) {
var curAttr = $(item).prop(attr);
rets.push(curAttr);
}
});
return rets;
}
});

HTML代码如下:

<div class="check-list">
<hr>
<div class="J_CheckListContainerBasic">
<h4>基本使用</h4> <div class="check-all">
<label>全选 <input type="checkbox" class="J_CheckAll"></label>
<ul class="sub-checkbox">
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="1"></label></li>
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="2"></label></li>
<li><label>选中 <input type="checkbox" class="J_CheckItem" value="3"></label></li>
</ul>
</div>
</div>
</div>

JS初始化如下:

var checkAll=  new CheckAll({
container: '.J_CheckListContainerBasic',
checkAll: '.J_CheckAll',
checkItem: '.J_CheckItem'
},function(){
console.log(checkAll.getValues('.J_CheckItem',"value"));
});

当然为了查看效果,我也提供了JSFIddler地址 供预览:

JS全选功能演示

 
 

S全选功能代码的更多相关文章

  1. Android ListView条目全选功能,不用checkbox实现!

    大家好,翻了翻曾经的笔记,发现了一个我特别标记的功能,那就是ListView全选功能,顿时想起了我那个时候苦逼的生涯,因为我大学机械出身,大学毕业了都不知道什么叫代码,在58干了一段销售.实在是干不下 ...

  2. JS全选功能代码优化

    原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...

  3. Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能

    这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l)  给JButton添加一个鼠标点击监听器l ...

  4. jquery与js实现全选功能的区别---2017-05-12

    一.jquery常用的事件 click(),dbclick() focus(),blur() change() keydown(),keypress(),keyup() mousedown(),mou ...

  5. JS实现全选功能

    000. 开始 学习JS有一段时间了,最近看了一些JS练手的小demo实例,自己也尝试着用JS进行实现. 全选功能是在很多注册页面.获取用户兴趣爱好.让用户勾选一些选项等页面中常见的一种效果,主要有全 ...

  6. JavaScript实现全选功能

    最终效果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  7. 问题1:jquery实现全选功能,第二次失效(已解决)

    问题:使用了attr("checked",true”)设置子复选框的被选状态,第一次执行功能正常,但第二次失效. 解决方案:将attr("checked",tr ...

  8. EasyUI datagrid 复选框可以多选但不能全选功能实现

    1.功能需求:  实现多选,但是不能够全选功能 2.js代码 //帮卖列表页面,可以多选但是不能够全选实现 $(".datagrid-header-check").children ...

  9. ElementUi 全选功能实现

    每次使用官方的示例都会被坑一下(可能是我的理解不够透彻吧,不记录一下保不准下次依旧会忘), 故此今天做个Demo 记录一下.本次仍然使用官网给出的示例,只做理解性的说明. 1.此处先给出官方示例代码: ...

随机推荐

  1. OC省字典的数组摘要集

    开放式党员 NSString *filePath = @"/Users/dlios/Downloads/area.txt"; 推断错误值 打印出来 NSError *error = ...

  2. debugging python with IDLE

    1. start IDLE "Python 2.5"→"IDLE(Python GUI)" 2. open your source file window Fr ...

  3. 微信公众号PHP简单开发流程

    原文:微信公众号PHP简单开发流程 微信公众号开发分傻瓜模式和开发者模式两种,前者不要考虑调用某些接口,只要根据后台提示傻瓜式操作即可,适用于非专业开发人员. 开发模式当然就是懂程序开发的人员使用的. ...

  4. 求和问题(DFS)

    输入: n=4 a={1,2,4,7} k=13 输出: YES 输入: n=4 a={1,2,4,7} k=13 输出: NO 选出若干数,使它们的和恰好为k #include <stdio. ...

  5. JS常用方法总结,及jquery异步调用后台方法实例

    //前台接收get参数值 function getQueryString(name) {            var queryStrings = window.location.search.sp ...

  6. 10分钟学会Linux

    10分钟学会Linux有点夸张,可是能够让一个新手初步熟悉Linux中最重要最主要的知识,本文翻译的英文网页在众多Linux入门学习的资料中还是很不错的. 英文地址:http://freeengine ...

  7. Android &quot;QR二维码扫描&quot;

    支持灯 扫描结果 支持 抄.分享.浏览打开(超链接) 自己主动保存扫描记录 划删除 和源代码 git: http://git.oschina.net/892642257/QRCode csdn(0分) ...

  8. js拾遗:appendChild 添加移动节点

    原文:js拾遗:appendChild 添加移动节点 写js一年多了,一直以为自己很牛逼,开始写各种博文分享,昨天写了一篇<浅谈 IE下innerHTML导致的问题>在看了下面的评论,我才 ...

  9. PHP进口Excel至MySQL方法

    PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader 注意点: reader.php 中的以下这行要改动  1.将 ...

  10. 教你一步一步部署.net免费空间OpenShift系列之二------创建应用

    接上回书,注册完毕后需要在Openshift上创建一个应用空间,如如何创建空间呢,Openshift本身是不直接支持Mono来部署ASP.Net程序的,需要借助openshift-community- ...