翻页后js失效;

重绘事件-当表格重绘完成后
重新绑定事件: draw.dt
$('#example').dataTable();

$('#example').on( 'draw.dt', function () {
console.log( 'Redraw occurred at: '+new Date().getTime() );
} );

  


(多列排序)
//按第二列降序排序,
出现提示: Datables wrning(table id='example'):Cannot reinitialise DataTable. To retrieve the
Datables object for this table,please pass eithser no arguments to the dataTable() function,
解决方法:

1、加 "bDestroy":true,和"bRetrieve": true, 只是能屏蔽提示。 

2、 $(document).ready(function () {
$('#Todolisttable').dataTable().fnDestroy(); //必须加fnDestroy() 这个.将这个表格先销毁,然后在重新生成。
$('#Todolisttable').dataTable({
"aaSorting": [
[1, "desc"] //按第二列降序排序,
] }); });
、 $(document).ready(function () {
$('#Todolisttable').dataTable().fnDestroy();
$('#Todolisttable').dataTable({
"aaSorting": [
[, "desc"]
] }); });

用了DataTables做为展示数据的表格。该控件支持分页,而且又漂亮。这是官网的地址http://www.datatables.net/ 。本文记录我在工作中用到DataTables的相关功能及实现。

在采用这个控件之前,服务端向网页返回数据,页面用javascipt将数据拼接成html的表格,代码中充斥着很多 += '<td>' '<tr>' '<a>'。而且还要处理分页,每个页码还要自己绑定一个拼接的url请求,代码不仅长,而且页面的展示效果不好功能也不够强大。

采用了这个控件展示数据后,javascript的代码减少了70-80行。它要求服务端要按照它规定的数据格式返回数据,接着会帮我们自动处理分页和数据的展示,就不用我们手动拼接字符串构造table表的元素了。

先看代码:

  1. function generate_table() {
  2. g_table = $('#historyResult').dataTable({
  3. "oLanguage": {
  4. "sLengthMenu": "每页 _MENU_ 条数据",
  5. "sZeroRecords": "没有数据",
  6. "sInfo": "_START_ - _END_ 总(_TOTAL_)",
  7. "sInfoEmpty": "0 - 0 总数: 0"
  8. },
  9. "sPaginationType": "full_numbers",
  10. "bProcessing": true,
  11. "bServerSide": true,
  12. "bSort":false,
  13. "bFilter": false,
  14. "sAjaxSource": "/index.php/history/queryHistory",
  15. "fnServerParams": function( aoData )
  16. {
  17. aoData.push(
  18. {"name":"keywords","value":$('#keyword_txt').val(),
  19. {"name":"start_date","value":$('#start_date_txt').val()},
  20. {"name":"end_date","value":$('#end_date_txt').val()}
  21. )
  22. }
  23. });
  24. }

具体的参数意思可以参考官方文档。这里提一下fnServerParams。这个参数可以帮我们传递页面的其他参数,这个例子中,我传递了关键字、起止日期信息,主要用于服务端的数据查找过滤。

用chrome看一下控件会向服务端传递什么:

这是底部的分页栏

当我点第二页时,传递参数如下:

注意到iDisplayLength是10,因为我默认是每页展示10条数据,这个值可以调整。当我点第二页时,iDisplayStart从0变到10。其实分页就是这么回事,前端告诉服务端,我需要那段数据,你给我找出来返回给我。

服务端的返回格式如下(PHP):

  1. $ret = array(
  2. "sEcho" => intval($_GET['sEcho']),
  3. "iTotalRecords" => $data_count,
  4. "iTotalDisplayRecords" => $data_count,
  5. "aaData" => array()
  6. );

$data_count是总数据量。aaData是需要展示的数据,之后可以填充。代码如下

  1. $ret['aaData'][] = array($id, $user, $action, $business, $files, $time, $result);

这是填充一条数据的PHP代码,注意变量的前后位置很重要,这决定了表格中展示数据的位置。如果想在表格中嵌套<a>标签,这也是可以的。在服务端将数据拼接成a标签返回即可。

填充完后就返回数据:

  1. echo json_encode($ret);

我所维护的页面有一个功能,就是能根据日期和关键字查找记录。当我们点击表格中的下一页时,它会自动的向服务端发起一次数据请求。然而,怎么让用户点击一个按钮时,也发起一次数据请求呢?

我的办法是:将这个表格先销毁,然后在重新生成。代码如下:

  1. $("#search").click(function(){
  2. g_table.fnDestroy();
  3. generate_table();
  4.   });

重新生成表格会默认第一页,而每次搜索都是根据不同的关键字和日期的,所以跳到第一页是合理的。如果不用fnDestroy(),试图直接覆盖g_table重新生成,这是不允许的。

至此,实现了基于DataTables的数据查找及分页。

 

jquery 的datatables插件问题的更多相关文章

  1. jQuery的dataTables插件实现中文排序

    最近在写Java web. 写JSP的时候发现一个很好玩的插件dataTables.分页.过滤.排序等等手到擒来. 哎哎哎,有点点可惜的是排序这个功能不支持中文.于是网上查查找找,现在把方法整理一下, ...

  2. 黄聪:JQUERY的datatables插件,Date range filter时间段筛选功能

    需配合moment插件实现:http://momentjs.com/ 演示:http://live.datatables.net/zuciyawi/1/edit HTML代码 <!DOCTYPE ...

  3. jquery,Datatables插件使用,做根据【日期段】筛选数据的功能 jsp

     时间格式为yyyymmdd,通过转换为int类型进行比较大小 画面: jsp代码: 1 //日期显示控件,使用h-ui框架 2 3 <div class="text-c"& ...

  4. 解决JQuery中datatables设置隐藏显示列多次提交后台刷新数据的问题

    此次项目开发过程中用到了Jquery的Datatables插件,无疑他是数据列表展示,解决MVC中同步过程中先走控制器后返回视图,查询数据过程中无法提示等待的弊端, 而且他所提供的各种方法也都有较强的 ...

  5. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  6. jquery.dataTables插件使用例子详解

    DataTables是一个jQuery的表格插件.这是一个高度灵活的工具,依据的基础逐步增强,这将增加先进的互动控制,支持任何HTML表格 效果图 代码 <!doctype html> & ...

  7. jQuery DataTables插件分页允许输入页码跳转

    背景说明 项目中使用jQuery DataTables插件来实现分页表格,但是默认的分页样式不能输入页码进行跳转,在页数非常多的时候使用很不方便,最主要的还是没有达到产品部门的设计要求,所以我需要寻找 ...

  8. dataTables 插件学习整理

    在项目中使用了dataTables 插件,学习整理一下. dataTables 的官方中文网站 http://www.datatables.club 引入文件: 所有的都要引入 jq文件 1. dat ...

  9. Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析

    一.问题描述 前端需要使用表格来展示数据,找了一些插件,最后确定使用dataTables组件来做. 后端的分页接口已经写好了,不能修改.接口需要传入页码(pageNumber)和页面显示数据条数(pa ...

随机推荐

  1. 【jQuery 冻结任意行列】冻结任意行和列的jQuery插件

    实现原理: 创建多个div,div之间通过css实现层叠,每个div放置当前表格的克隆.例如:需要行冻结时,创建存放冻结行表格的div,通过设置z-index属性和position属性,让冻结行表格在 ...

  2. Linux系统性能10条命令监控

    Linux系统性能10条命令监控 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmstat 1 mpstat -P ALL 1 p ...

  3. jsp include指令

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  4. 比较和排序(IComparable和IComparer以及它们的泛型实现)

    本文摘要: 1:比较和排序的概念: 2:IComparable和IComparer: 3:IComparable和IComparer的泛型实现IComparable<T>和ICompare ...

  5. JS(ajax笔记)

    简介:AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法,是与服务器交 ...

  6. HIVE 创建外部分区表--利用HUE不能创建外部表

    Create EXTERNAL table obd_data_2( imei string, ts timestamp, fuel_instant float, gps_speed float, gp ...

  7. Oracle查询每天固定时间段的数据

    select * from GPS_LOG t where to_char(t.gps_time,'hh24:mm:ss')>='15:30:00'and to_char(t.gps_time, ...

  8. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 C. Colder-Hotter

    C. Colder-Hotter time limit per test 1 second memory limit per test 512 megabytes input standard inp ...

  9. session过期问题

    php中session过期时间设置及回收机制详解: 修改php中的session过期时间可以修改php配置文件php.ini中的session.gc_maxlifetime即可. 当php每发出一次请 ...

  10. Spring Assert(方法入参检测工具类-断言)

    Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异 ...