背景说明

项目中使用jQuery DataTables插件来实现分页表格,但是默认的分页样式不能输入页码进行跳转,在页数非常多的时候使用很不方便,最主要的还是没有达到产品部门的设计要求,所以我需要寻找相应的解决方案。
 
原始效果图
目标效果图

方案分析

一开始,我在网上搜索到了相关资料。
 
【官方】Navigation with text input
这个是jQuery DataTables官方提供的插件,虽然实现了输入页码跳转的功能,但是和我目标效果不一致
 
【CSDN】DataTables页码后面添加可输入页码跳转
这个方案是直接修改jquery.datatables.js的源码,在原有分页的后面添加输入框,然后在表格加载完成事件fnDrawCallback中为输入框添加事件。
 
本来,我想沿用官方的方式,单独写一个插件,这样不会污染DataTables插件原有代码,但是实在是水平有限,所以采用了CSDN直接修改插件代码的方式。
  • 在添加输入框的原理上和CSDN博客描述的一致
  • 但是对于事件的处理,不在fnDrawCallback中进行,而是直接在添加输入框之后,紧接着根据id对输入框和确认按钮进行事件设置
  • 而且CSDN博客中的事件代码在我这个版本的DataTables插件中无法执行,我转而参考了官方插件的事件代码,最终形成了我的方案

插入代码

注意:我使用的是DataTables 1.10.12版本,不同版本实现可能不同。
  1. // START 2016-12-27添加,用于输入分页页码
  2. $(".gotoPage").remove();
  3. var pageHtml = "<span class='gotoPage' style='margin-left: 10px;'>" +
  4. "<span>到第</span>" +
  5. "<input type='text' style='width: 40px; padding-left: 2px; padding-right: 2px; text-align: center;' class='integer' id='textGotoPage' data-prev='"+(page+1)+"' value='"+(page+1)+"'>" +
  6. "<span>页</span>" +
  7. "<a class='paginate_button' style='width: 40px; border-right: 1px solid #e4e4e4;' id='btnGotoPage'>确认</a>" +
  8. "</span>";
  9. $(pageHtml).appendTo(container);
  10. // 对页码输入进行限制,只能输入数字
  11. var sfn = function() {
  12. var value = $(this).val();
  13. if (value == '') {
  14. $(this).data("prev", $(this).val());
  15. return;
  16. }
  17. var max = $(this).attr("maxlength");
  18. if (value.length > max)
  19. $(this).val(value.slice(0, max));
  20. var regex = /^\d+$/;
  21. if (!regex.test(value)) {
  22. $(this).val($(this).data("prev"));
  23. }
  24. $(this).data("prev", $(this).val());
  25. };
  26. var testinput = document.createElement('input');
  27. if('oninput' in testinput){
  28. document.getElementById("textGotoPage").addEventListener("input", sfn, false);
  29. } else {
  30. $("#textGotoPage").onpropertychange = sfn;
  31. }
  32. // 为确认按钮添加点击事件,执行分页跳转
  33. $("#btnGotoPage").click(function(){
  34. var textGotoPage = $("#textGotoPage").val();
  35. if (textGotoPage == null || textGotoPage === '' || textGotoPage.match(/[^0-9]/)) {
  36. // 没有输入或者输入了非数字,清除非数字
  37. $("#textGotoPage").val(textGotoPage.replace(/[^\d]/g, ''));
  38. return;
  39. }
  40. if(parseInt(textGotoPage) > 0){
  41. var oSettings = settings;
  42. var iNewStart = oSettings._iDisplayLength * (textGotoPage - 1);
  43. if (iNewStart < 0) {
  44. iNewStart = 0;
  45. }
  46. if (iNewStart >= oSettings.fnRecordsDisplay()) {
  47. iNewStart = (Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength) - 1) * oSettings._iDisplayLength;
  48. }
  49. oSettings._iDisplayStart = iNewStart;
  50. _fnDraw(oSettings);
  51. }
  52. });
  53. // END

jQuery DataTables插件分页允许输入页码跳转的更多相关文章

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

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

  2. jQuery DataTables 插件使用笔记

    初始化 在页面中 <!DOCTYPE html> <html> <head> <link rel="stylesheet" type=&q ...

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

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

  4. jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性

    前言:在很多时候,我们需要文本框中显示默认值,获取焦点时,文字框中就会清空给的值,当失去焦点时,如果没有值,继续显示默认的文字,如果有输入值,就显示输入的值.现在项目中需要用到这个地方的功能比较多,于 ...

  5. jQuery 自定义插件 (分页控件)

    1.引入jqpage.js 2.html代码 <div id="page"> </div> 3.js 调用 $(function () { $.fn.jqp ...

  6. 使用jquery datatables插件遇到fnReloadAjax的问题

    1 官网地址:http://www.datatables.net/ 2 基本参数介绍 http://blog.csdn.net/mickey_miki/article/details/8240477 ...

  7. 黄聪:Jquery+DataTables插件,如何在ajax调用服务器数据后,自动给tr添加id属性

    http://legacy.datatables.net/usage/callbacks#fnRowCallback 主要通过 fnCreatedRow 事件来实现 var table = $('#t ...

  8. jquery DataTables表格插件的使用(网页数据表格化及分页显示)

    DataTables - 非常强大的 jQuery 表格插件,可变宽页码浏览,现场过滤. 多列排序,自动探测数据类型,智能列宽,可从几乎任何数据源获取数据. 那么在Bootstrap下如何使用Data ...

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

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

随机推荐

  1. Windows窗体技术

    Windows窗体技术 Winform例子下载 https://pan.baidu.com/s/1zXO8gVuFAeKQ_Tnz55A4VQ  密码:i1r6

  2. XSS学习小结

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...

  3. 迷你MVVM框架 avalonjs 学习教程17、avalon的一些配置项

    本章节,主要是介绍avalon.config方法,通过它来制定一些更贴心的功能. 一般情况下,我们在使用ms-controller绑定时,需要添加一个ms-controller类名,目的是为了防止网速 ...

  4. ArcGIS模型构建器案例学习笔记-字段处理模型集

    ArcGIS模型构建器案例学习笔记-字段处理模型集 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 由四个子模型组成 子模型1:判断字段是否存在 方法:python工 ...

  5. Ansible Playbook Variables

    虽然自动化存在使得更容易使事情重复,但所有的系统可能不完全一样. 在某些系统上,您可能需要设置一些与其他操作略有不同的行为或配置. 此外,一些观察到的远程系统的行为或状态可能需要影响如何配置这些系统. ...

  6. 运行Maven项目时出现invalid LOC header (bad signature)

    为Maven小白,今天这问题困扰了我好久,经过多次在网上查询,终于找到了原因.明明一个小问题却耗费很多时间,着实不应该,所以必须记录一下. 报错信息如下:   对话框: 控制台: <span s ...

  7. 单点登录(SSO)解决方案之 CAS客户端与Spring Security集成

    接上篇:单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制 ...

  8. jquery 显示 隐藏

    参考 http://www.w3school.com.cn/jquery/jquery_hide_show.asp $("#a").hide(); $("#a" ...

  9. 《Visual Basic开发实战1200例》包括第I卷、第II卷共计1200个例子,本书是第I卷,共计600个例子。

    本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual Basic进行程序开发各个方面的知识和技巧.主要包括基础知识.窗体界面设计.控件应用等.全书分6篇20章,共计6 ...

  10. js:二级联动示例

    联动原理 当用户点击省级的下拉选项,选择所在省,下一个下拉选项里的选项,则变成用户选择省下的所有市的信息,不会出现其它省市的信息. 省市数据 把省市数据,保存在js文件中,以json形式保存,以便读取 ...