datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)

时间:2023-01-06 20:58:09

一、动态定义列头

在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对

我自定义了Mock数据,用于前端自己交互。

其中,rowdata用于存放传回的数据,col_define用于存放定义的列头,targets表示第几列,title表示列名,data是为了对应data下的rowdata数据

$.mockjax({
url: "/salary_import",
status: 200,
responseText: {
'code': 'ok',
'Msg': '小垃圾',
'data': {
'rowdata': [
{
'名字': '呆头鹅',
'身份证': 123456789451,
'exist': 0,
'基本工资': 1000,
'职位工资': 100,
'绩效工资': 10,
'应扣工资': 2000
}, {
'名字': '小学鸡',
'身份证': 12123214124,
'exist': 0,
'基本工资': 2000,
'职位工资': 300,
'绩效工资': 30,
'应扣工资': 3000
}, {
'名字': '奔比',
'身份证': 123456789451,
'exist': 0,
'基本工资': 1000,
'职位工资': 100,
'绩效工资': 10,
'应扣工资': 2000
}],
'col_define': [{
'targets': 0,
'data': '名字',
'title': '名字'
}, {
'targets': 1,
'data': '身份证',
'title': '身份证'
}, {
'targets': 2,
'data': '基本工资',
'title': '基本工资'
}, {
'targets': 3,
'data': '职位工资',
'title': '职位工资'
},{
'targets': 4,
'data': '绩效工资',
'title': '绩效工资'
},{
'targets': 5,
'data': '应扣工资',
'title': '应扣工资'
}]
}
}
});

那么你ajax交互的时候,就可以

var opts = [];
$.ajax({
url: '/salary_import',
type: 'POST',
async: false,
cache: false,
dataType: 'json',
beforeSend: function () {
},
success: function (res) {
if ('ok' === res['code']) {
alert('解析完成!');
console.log('返回数据 是', res['data']);
opts.data = res['data']['rowdata'];
// opts.data = res.data.rowdata;
console.log(opts.data);
opts.columns = res['data']['col_define'];
var excel = $('#salary_excel_table').DataTable({
'language': lan,
"dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">',
"paging": true,
"lengthChange": true,
"info": true,
'destroy': true,
"deferRender": true,
'columns': opts.columns,
'data': opts.data,
});

不知道是否是插件之间兼容性问题,反正,如果我直接先在外面初始化了datatable,给opts先赋了初始配置值,然后再在ajax下,通过改变对应变量再赋值回datatable下的配置文件,即

  var excel = $('#salary_excel_table').DataTable(opts);会莫得什么卵用,因为我百度上都是这样教的,可能单单是我的问题吧,只能重新写份自定义配置,会保险很多,这里就是动态定义列头了,通过后台给的数据,直接描绘前端的列头
二、给某行添加事件
var person=$('#person_table').Datatable(..........);//里面的配置自己去配置你们想要后台给你们的data,格式就不教了
$("#person_table").on("click","tr",function(){
var table_data =person.row(this).data();
console.log(table_data);
var department=table_data.department;
var id=table_data.id;
var name=table_data.name;
$.ajax({
url:'/point',
type:'POST',
data:{
department:department,
id:id,
name:name
},
cache: false,
async: true,
success: function (result) {
console.log(result);
var m = $('#money_table').DataTable();
reloadData(m, result['data']['data_money']);
},
error: function () {
alert('德玛西亚')
}
}) });
function reloadData(table, dataList) {
var currentPage = table.page();
table.clear();
table.rows.add(dataList);
table.page(currentPage).draw(false);
};
 

点击Datatable下某行,就能够获取到该行数据,放好id,姓名和部门,然后用ajax将这三个数据发给后台,让后台返回给你需要的数据,去渲染另一个datatable(这里你随便怎样都可以,也可以做跳转啥的),重要的是前后端那些数据格式要对好,不然都会出现列数据对不到的错误,还有就是这个reloadData很重要!

三、初始显示空数据

这个就更简单了,你一开始配置表格的时候嘛,可以不写ajax,但是写好列行数据格式,反正没人传给你的会,就是空,等你点击什么或者导入什么的时候,success了再ajax到对应的表的行数据就行了

(所以看清楚,一开始再DataTable里没有AJAX数据获得的话,就是没有行数据的,会显示没有数据,但是列头还是存在的,所以下面没有ajax)

var money_table = $('#money_table').DataTable({
'language': lan,
"dom": 'lB<"top"f><"toolbar">rt<"bottom"ip><"clear">',
"paging": true,
"lengthChange": true,
"info": true,
"order": [
[0, "desc"]
],
"columnDefs": [
{
"title": "应发",
"targets": 0
},
{
"title": "应扣",
"targets": 1
},
{
"title": "实发",
"targets": 2
},
{
"title": "个税",
"targets": 3
},
{
"title": "年月",
"targets": 4
},
{
"title": "功能",
"targets": 5 ,
"render": function (data, type, full, meta) {
if (data) {
return express_html
} else {
return ''
}
}
}
],
'columns':[
{'data':'yf'},
{'data':'yk'},
{'data':'sf'},
{'data':'gs'},
{'data':'yy-mm'},
{'data':null}
],
'destroy':true,
"deferRender": true
});
 

datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)的更多相关文章

  1. JQuery实现表格动态增加行并对新行添加事件

    实现功能: 通常在编辑表格时表格的行数是不确定的,如果一次增加太多行可能导致页面内容太多,反应变慢:通过此程序实现表格动态增加行,一直保持最下面有多个空白行. 效果: 一:原始页面 二:表1增加新行并 ...

  2. easyui动态生成双列头

    实习时老大交给任务,让我做这样一个效果,选择日期并点击查询时,动态生成列头,下一列要求对应日期的星期. 效果图: 下面贴出查询的单击函数: //查询按钮 function queryByDate(){ ...

  3. easyui动态生成列

    需求:一个id对应多个key value 将id作为标识列 key值作为表头 value作为值显示.数据表可分为两张表 param数据表: 下表一个id对应上表多个key及value 如下图 id_p ...

  4. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  5. WPF &plus; RDLC &plus; 动态生成列 &plus; 表头合并

    如下,评论超过20条,马上发代码*(੭*ˊᵕˋ)੭*ଘ,效果如下: 代码逻辑简单. WPF使用RDLC需要使用如下DLL 新建WPF 窗体,黏贴下大概如下 <Window xmlns:rv=&q ...

  6. 动态定义数组 &period;xml

    pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...

  7. 雷林鹏分享:jQuery EasyUI 数据网格 - 动态改变列

    jQuery EasyUI 数据网格 - 动态改变列 数据网格(DataGrid)列可以使用 'columns' 属性简单地定义.如果您想动态地改变列,那根本没有问题.为了改变列,您可以重新调用dat ...

  8. easyui如何动态改变列的编辑属性

    动态改变列的编辑属性 var tt=$('#dg').datagrid('getColumnOption', 'yearContent'); //通过列名获得此列 tt.editor={type:'t ...

  9. Oozie调度报错——ORA-00918:未明确定义列

    Oozie在执行sqoop的时候报错,同样的SQL在sqoop中可用,在oozie中不可用: Caused by: java.sql.SQLSyntaxErrorException: ORA-0091 ...

随机推荐

  1. python 函数的参数定义及调用

    参数定义:1. 位置参数:    这是熟悉的标准化参数,位置参数必须在调用函数中定义的准确顺序来传递,在没有默认参数的情况下,传入参数    的精确数目必须和声明的数目一致. def foo(who, ...

  2. Red and Black---hdu1312(dfs)

    2015-04-07http://acm.hdu.edu.cn/showproblem.php?pid=1312 Sample Input 6 9....#......#............... ...

  3. Android学习笔记(十三)SharedPreference必须掌握的基础

    我们在开发中,应用程序会保存少量数据,例如一些字符串.一些标记或者一些配置文件,这时候如果去使用SQLite保存这些数据的话,难免会显得大材小用,用起来也不方便,对于这种信息,保存在SharedPre ...

  4. Orace数据库锁表的处理与总结&lt&semi;摘抄与总结二&gt&semi;

    当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误. TX锁等待的分析 Oracle数据库中一般使用行级锁. 当Oracle ...

  5. mysql设置连接等待时间(wait&lowbar;timeout)

    Linux下mysql修改连接超时   1,首先进入mysql,查看 wait_timeout.interactive_timeout这个值是否为默认的8小时(即 28800)  [root@serv ...

  6. 2&period;9&period; Scalar Properties for Primitive Data Types 选项(Core Data 应用程序实践指南)

    该选项的意思是,“用Scalar特性来表示原始数据类型”.什么意思,妈妈米呀,这是我学这门课程遇到的最难懂的概念. scalar properties,是复数,也就是说是 “分等级的属性”.那么,大概 ...

  7. node&period;js中fs文件系统模块的使用

    node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作. fs模块中,所有的方法分为同步和异步两种实现. 有 sync 后缀的方法为同步方法,没有 sync 后缀的方法 ...

  8. WampServer自己DIY添加apache、php、mysql版本

    下载自己需要的apache版本. 下载地址: http://httpd.apache.org/download.cgi http://www.apachelounge.com/download/ 解压 ...

  9. vim 常用

    Format JSON :%!python -m json.tool 1. define custom function and use it define function in .vimrc fu ...

  10. java lock锁住特定对象

    由于lock没有锁住特定对象的概念,该如何做到像synchronized同步块一样的效果呢? 答案:为每一个需要加锁的对像分配一把锁. 示例: List<User> users = new ...