众所周知,bootstrap table 的现有api中,对列表的单击事件仅支持对行的单击
和对单元格
的单击。而对表头的操作也只有点击列标题排序
。并没有开放对某列标题的单击事件,即列标题是不可点击状态。
为了实现对列标题的单击而触发相应的操作,这里可以利用jquery对整个document
的获取来找到bootstrap生成的表格的表头<th>标签
步骤说明:
- 如下图的表格中,现需求为:点击
“显示/隐藏”
列标题,控制右侧两列的显示和隐藏。
表格列的初始化代码:
/**
* 初始化表格的列
*/
Projecttype.initColumn = function () {
return [
{checkbox:true, halign:'center',align:"center",width: 50},
{title: '序号',align:"center" ,halign:'center',width:50 ,formatter: function (value, row, index) {return (Projecttype.pageNumber-1)*Projecttype.pageSize +1 +index ;}},
{title: '显示/隐藏', field: 'show_hide', align: 'center',halign:'center',width:50},
{title: '项目所属类别', field: 'projectType', align: 'center',halign:'center'},
{title: '备注', field: 'note', align: 'center',halign:'center'},
{title: '登记人', field: 'createUser', align: 'center',halign:'center'},
{title: '登记日期', field: 'createDate', align: 'center',halign:'center'}
];
};
- 添加对表头的点击事件
// 表头点击事件
var show_hide_flag = "show";// 点击/隐藏标识符
$(document).on("click","th",function() {
var field = $(this).attr("data-field");// 获取表格标题的data-field属性
if ("show_hide" == field){
if ("show" == show_hide_flag){
$('#ProjecttypeTable').bootstrapTable('hideColumn','projectType');
$('#ProjecttypeTable').bootstrapTable('hideColumn','note');
show_hide_flag = "hide";
}else{
$('#ProjecttypeTable').bootstrapTable('showColumn','projectType');
$('#ProjecttypeTable').bootstrapTable('showColumn','note');
show_hide_flag = "show";
}
}
})
说明:var field = $(this).attr(“data-field”);
获取的field即为添加列时的field:'show_hide’属性
- 为了提高用户体验,在鼠标移到列标题时,给出
小手
显示。在初始化table的代码中添加如下事件(该事件的作用为:在所有其他事件执行后,都会执行此事件。之前试过用onLoadSuccess事件,但小手的显示会出问题)
onAll:function(){
// 在所有表格的事件操作后都对下列需要显示/隐藏的表头添加“小手”样式
var ths = $(document).find('th');
for (let i = 0; i <ths.length ; i++) {
if ($(ths[i]).attr("data-field") == 'show_hide'){
$(ths[i]).find(".th-inner").attr('style','cursor:pointer');
}
}
总结:点击“显示/隐藏”的动画效果就不花时间制作了。
主要的问题就是通过document的doom节点来获取到到table的列标题标签。