HTML5定制全选列头
随着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定制全选列头的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- C#总结(三)DataGridView增加全选列
最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...
- DataGridView增加全选列
最近的一个winform的项目中,碰到datagridview控件的第一列添加全选的功能,通常这个功能,有两种实现方式:1. 为控件添加DataGridViewCheckBoxColumn来实现,但是 ...
- GridControl 添加全选列
这里通过List对象绑定GridControl,且不用在GirdControl界面中添加任何列,实现CheckBox列的方法 1.列表中出现CheckBox列 非常简单,在绑定的List实体中,增加一 ...
- 实现DataGridView和DevExpress.GridControl表头全选功能
1)DevExpress控件的GridView的实现多选操作 先讲DevExpress控件的GridView的实现,要实现的功能基本上是处理单击全选操作.重新绘制表头等操作,首先在加载第一步实现相关的 ...
- 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能
首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...
- datagrid 绑定选中数据,列头全选
成品图: xaml代码 <Grid> <DataGrid x:Name="datagrid" Height="Auto" Width=&quo ...
- GridControl 选择列、复选框全选(上)
说明: GirdControl 中添加一列,这一列不是写在数据库中的,而是代码中添加的. 图示: 底层类代码: #region GridControl 全选 /// <summary> / ...
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...
随机推荐
- 【bzoj2464】中山市选[2009]小明的游戏
直接转换成最短路 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstr ...
- A Go library implementing an FST (finite state transducer)——mark下
https://github.com/couchbaselabs/vellum Building an FST To build an FST, create a new builder using ...
- backbone源代码注释(部分)
// Backbone.js 1.0.0 // (c) 2010-2013 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...
- G. 铁路修复计划 最小生成树
G. 铁路修复计划 二分答案,改变边的权值,找最小生成树即可. 类似的思想还可以用在单度限制最小生成树和最优比例生成树上. #include<iostream> #include<c ...
- vs code 快速生成vue 模板
vs code 快速生成vue 模板 1.使用快捷Ctrl + Shift + P唤出控制台,然后输入snippets并选择.(或 文件>首选项>用户代码片断里面,输入 vue.json ...
- [Swift通天遁地]一、超级工具-(16)使用JTAppleCalendar制作美观的日历
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 如何保证access_token长期有效--微信公众平台开发
http://blog.csdn.net/qq_33556185/article/details/52758781 import javax.servlet.ServletContext; impor ...
- HDU 4691 后缀数组+RMQ
思路: 求一发后缀数组,求个LCP 就好了 注意数字有可能不只一位 (样例2) //By SiriusRen #include <bits/stdc++.h> using namespac ...
- C# 文件操作(摘抄)
——选自<c# 编程兵书>第11章 张志强 胡君 编著 11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一 ...
- python程序展现图片
突然想写一个python程序能够显示图片的 ,展示文字的已经实现了 现在就搞一搞这个吧 相信也是很简单 首先是放一张图片在e盘下面 等会程序打包的时候将会用到 就决定是你啦 皮卡丘: 然后就写代码吧: