随着HTML5产品分支的不断深入使用,HTML5的需求也是越来越多,表格组件的使用也不例外,什么排序,分页,自动列宽等。最近有客户提出了如果让表格的列头加上全选的功能。细细分析其实就是两部分,表格的body部分是勾选的列,表头也绘制成勾选的列。
对于表格body部分的勾选,最简单是应用TWaver默认的boolean类型的render,方法很简单,只要在创建表格列时设置下面的语句就行:

column.setValueType('boolean');

主要就是绘制表头的render,表头的render设置也是很easy,我们只要在表头的div中加上checkbox,然后再给checkbox加上动作,如果勾选上,就让这一列所有的数据都为true,反之亦然。代码如下:

var checkbox = document.createElement('input');
checkbox.setAttribute("type","checkbox");
checkbox.checked = true;
checkbox.onclick = function(e){
var checked = this.checked;
column.checked = checked;
databox.forEach(function(element){
element.setClient("nVisible",checked);
});
}
column.renderHeader = function(div){
div.style.textAlign = 'center';
div.appendChild(checkbox);
}


这样的默认效果感觉还不是那么美观,我们用图片来替代checkbox也可以达到同样的效果,再来看看这张图,感觉是不是好看了一点。

完整的代码实现见下方:

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>Custom Table</title>
<style>
.visible-header{background:url(checkeye.png) 0px 0px; border:none; width: 12px; height: 7px; cursor: pointer;}
.unVisible-header{background:url(checkeye.png) -17px 0px;}
</style>
<script type="text/javascript" src="twaver.js"></script>
<script type="text/javascript">
function init() {
var box = new twaver.ElementBox();
initDataBox(box);
var table = new twaver.controls.Table(box);
table.setEditable(true);
var tablePane = new twaver.controls.TablePane(table);
var visibleColumn = createColumn(table, 'Visible', 'nVisible', 'client', 'boolean', 30);
createColumn(table, 'Id', 'id', 'accessor', 'string',300);
createColumn(table, 'Name', 'name', 'accessor', 'string',70);
renderHeaderCheckBox(visibleColumn,box);
visibleColumn.renderCell = function(cell){renderCellCheckbox(cell)};
document.body.appendChild(tablePane.getView());
tablePane.getView().style.left = '50px';
tablePane.getView().style.top = '50px';
tablePane.getView().style.width = '400px';
tablePane.getView().style.height = '800px';
} function renderHeaderCheckBox(column,databox){
var checkbox = document.createElement('input');
checkbox.setAttribute("type","button");
checkbox.setAttribute("class","visible-header");
checkbox.checked = true;
checkbox.onclick = function(e){
var checked = this.checked;
column.checked = checked;
if(checked){
checkbox.setAttribute("class","visible-header");
}else{
checkbox.setAttribute("class","visible-header unVisible-header");
}
this.checked = !this.checked;
databox.forEach(function(element){
element.setClient("nVisible",checked);
});
}
column.renderHeader = function(div){
div.style.textAlign = 'center';
div.appendChild(checkbox);
}
} function renderCellCheckbox(cell){
var checkbox = document.createElement('input');
checkbox.setAttribute("type","button");
var checked = cell.data.getClient("nVisible");
if(checked){
checkbox.setAttribute("class","visible-header");
}else{
checkbox.setAttribute("class","visible-header unVisible-header");
}
checkbox.onclick = function(e){
var checked = cell.data.getClient("nVisible");
cell.data.setClient("nVisible",!checked);
}
cell.div.style.textAlign = 'center';
cell.div.appendChild(checkbox);
} function initDataBox(box){
for(var i = 0; i < 10; i++){
var node = new twaver.Node();
node.setName("node"+i);
node.setClient('nVisible',true);
box.add(node);
}
} function createColumn(table, name, propertyName, propertyType, valueType, width) {
var column = new twaver.Column(name);
column.setName(name);
column.setPropertyName(propertyName);
column.setPropertyType(propertyType);
if (valueType) column.setValueType(valueType);
if(width) column.setWidth(width);
column.setEditable(true);
column.setSortable(false);
table.getColumnBox().add(column);
return column;
}
</script>
</head>
<body onload="init()" style="margin:0;">
</body>
</html>

HTML5定制全选列头的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. C#总结(三)DataGridView增加全选列

    最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...

  3. DataGridView增加全选列

    最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...

  4. GridControl 添加全选列

    这里通过List对象绑定GridControl,且不用在GirdControl界面中添加任何列,实现CheckBox列的方法 1.列表中出现CheckBox列 非常简单,在绑定的List实体中,增加一 ...

  5. 实现DataGridView和DevExpress.GridControl表头全选功能

    1)DevExpress控件的GridView的实现多选操作 先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作.重新绘制表头等操作,首先在加载第一步实现相关的 ...

  6. 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

    首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...

  7. datagrid 绑定选中数据,列头全选

    成品图: xaml代码 <Grid> <DataGrid x:Name="datagrid" Height="Auto" Width=&quo ...

  8. GridControl 选择列、复选框全选(上)

    说明: GirdControl 中添加一列,这一列不是写在数据库中的,而是代码中添加的. 图示: 底层类代码: #region GridControl 全选 /// <summary> / ...

  9. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

随机推荐

  1. libXdmcp.so.6

    Traceback (most recent call last): File "/data/xiaole_dl_img/product.v.one.banner.fixedperiod.g ...

  2. POJ 3650:The Seven Percent Solution

    The Seven Percent Solution Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7684   Accep ...

  3. 23. Ext xtype : "combo" 下拉选择框

    转自:https://blog.csdn.net/majishushu/article/details/52601161

  4. 测试DNS服务的命令

    测试DNS服务的命令 dig dig用于测试dns系统,因此不会查询hosts文件进行解析. dig - DNS lookup utility dig [@global-server] [domain ...

  5. E20171228-hm

    traverse  n. 穿过; 横贯,横切; 横木; [建] 横梁;               vt. 通过; 横越,横贯; [法] 否认,反驳; [木工] 横刨;

  6. H5页面背景音乐,C33 360°旋转效果

    在做H5页面的时候,经常会需要用到背景音乐,比如电子贺卡.动态音乐相册等,右上角有个360°旋转的音乐图标,点击可以控制音乐是否播放,那这个效果是如何实现的呢?我现整理了一下代码:  Demo  点击 ...

  7. bzoj 1572: [Usaco2009 Open]工作安排Job【贪心+堆】

    先按照时间顺序加,价值塞进小根堆里,碰到不合法情况就从堆里减去 #include<iostream> #include<cstdio> #include<queue> ...

  8. bzoj 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝【dp+树状数组】

    把长度转成右端点,按右端点排升序,f[i]=max(f[j]&&r[j]<l[i]),因为r是有序的,所以可以直接二分出能转移的区间(1,w),然后用树状数组维护区间f的max, ...

  9. (数论)51NOD 1135 原根

    设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数)   给出1个质数P,找出P最小的原根. Input 输入1个质数P(3 <= P &l ...

  10. GG_DataAccess 数据库访问层使用dapper操作

    3.5.GG_DataAccess 数据库访问层使用dapper操作 和Model实体类同理,tt模板已写好,需要的可加qq群:547765059  自己下载.