基于jQuery的表格插件flexigrid 扩展:为列增加checkbox

关于flexigrid: 基于jQuery的datagrid插件。[url]http://www.flexigrid.info/[/url]

基本使用就不说了,看官网。这篇文章主要总结一下自己在使用中的一些心得,首先是对flexigrid进行简单的扩展,比如将某个数据列显示为一个checkbox.
要点,也就是主要修改的地方如下:

1.colModel -- flexigrid用来表头的模型,我们将在为之新增一个checkbox属性作为标识,若为true,则将这一列显示为checkbox。 用ctrl+f找到这段代码(为什么用Ctrl+F? 很明显写这插件的哥们儿很喜欢超长的函数,以至于这种独立的功能他都仅仅是加了一个注释而已):

//create model if any
if (p.colModel)
{
thead = document.createElement('thead');
tr = document.createElement('tr');

for (i=0;i<p.colModel.length;i++)
{
//此处即对colModel的处理。省略代码若干....
//Modified by me.
if (cm.checkbox){
$(th).attr('checkbox',cm.checkbox);
}
$(tr).append(th);
}

}

注释//Modified by me下面的if段,即是我们要做的修改,很明了,我们将为th添加一个'checkbox'属性,如果用户在colModel中设置了这一属性的话。


2.找到创建每个单元格的代码,稍作修改,判断单元格所在列的表头是否有checkbox属性,若有,则在单元格内创建一个checkbox。

继续Ctrl+F找到下面这段代码

//add cell
$('thead tr:first th',g.hDiv).each
(
function (){
//继续省略代码
if($(this).attr('checkbox')){
td.innerHTML = "<input type='checkbox' />";
}else{
td.innerHTML = row.cell[idx];
}
}

循环体中的代码就是对每一列的单元格进行渲染了。代码依旧很简单,对应的表头有'checkbox',就显示成checkbox,否则就显示对应的数据值。

到此为止呢,如果你手头有测试数据的话,就可以看到我们的checkbox已经出来了,接下来还有一点小问题,请继续往下看。

3.需要某一行被选中时,该行内的checkbox也应该被打上勾,同样的,勾选checkbox时,应当所在行的样式变为选中。

继续Ctrl+F([i]$(this).toggleClass('trSelected')[/i]),找到下面这段

$('tbody tr',g.bDiv).each
(
function ()
{
$(this)
.click(
function (e)
{

var obj = (e.target || e.srcElement); if (obj.href /*这里的判断条件修改了一下,使得checkbox的点击事件不被拦截掉*/) return true;

$(this).toggleClass('trSelected');
//这里的修改使checkbox的选中状态与行的trSelected css保持同步.
var isSelected = $(this).hasClass("trSelected");
$(this).find("input[type='checkbox']").each(function() {
isSelected ? $(this).attr("checked","checked") : $(this).removeAttr("checked");
});
if (p.singleSelect) {
$(this).siblings().removeClass('trSelected')
.find("input[type='checkbox']").removeAttr("checked");
}
}
)


OK,到此为止,完成任务。
使用方法呢,就是这个样子

$("#customer_flexigrid").flexigrid({
colModel: [
{ display: 'Select', name: 'id', width: 40, align: 'center', checkbox:true},
],
//其他配置省略

这只是一个简单的例子,事实上用同样的思路,我们可以把单元格表现成任意的形式。

最后吐槽一下JE的代码插入功能,太难使了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值