dataTables 增加输入指定页数进行跳转

修改dataTables.bootstrap.js源文件,找到

if ( btnDisplay ) {
	node = $('
  • ', { 'class': classes.sPageButton+' '+btnClass, 'id': idx === 0 && typeof button === 'string' ? settings.sTableId +'_'+ button : null } ) .append( $('', { 'href': '#', 'aria-controls': settings.sTableId, 'aria-label': aria[ button ], 'data-dt-idx': counter, 'tabindex': settings.iTabIndex } ) .html( btnDisplay ) ) .appendTo( container ); settings.oApi._fnBindAction( node, {action: button}, clickHandler ); counter++; } 复制代码
  • 在for循环外面添加:

    if($("#redirect")!=null){
    	$("#redirect").remove();
    	$("").appendTo( container );
    	$('#redirect').css({"outline":"none","margin-left":"5px","margin-right":"5px","position":"absolute","right":"80px"});
    }
    复制代码

    这样就添加了输入框在页码按钮后面了,

    接下来就是绑定事件,在定义dataTable的时候添加如下属性(在 jquery.dataTables.js 源码中找到"fnDrawCallback": null ,替换为以下代码):

    "fnDrawCallback": function(){
         var oTable = $(myTable).dataTable();
         $('#redirect').keyup(function(e){
             if(e.keyCode==13){
             
    if($(this).val() && $(this).val()>0){
                 var redirectpage = $(this).val()-1;
             }else{
                 var redirectpage = 0;
             }
             oTable.fnPageChange( redirectpage );
             }
         });
     },
    复制代码

    即当输入回车时执行跳转

    原文转自 https://blog.csdn.net/cw370008359/article/details/51516427


    以上为页面中存在一个table表格的情况

    如果你的页面中也存在多个table表格的情况,接着尬聊,请看下面...

    如图所示

    页面中tab下的表格都是独立的,相当于初始化了5个datatable(第一个tab无表格),so... 上面的方法解决不了此问题。突破口在定义dataTable的时添加的fnDrawCallback属性,在上面的方法中可以看到 var oTable = $(myTable).dataTable();只要把 $(myTable)改成每次点击的时候相对应的table表格id即可;

    // tab 切换
    $(".page-tabs-custom li").click(function(){
    	// 当前点击的tab标识
    	var tableIndex = $(this).attr("id");
    	console.log(tableIndex);
    	// 给相对应的表格id添加属性
    	switch (tableIndex)
    	{
    	case '0':
    	  break;
    	case '1':
    		tableId = $("#groupMessageHistory").dataTable();  
    		console.log('1');
    	  break;
    	case '2':
    		tableId = $("#messagePushHistory").dataTable();   
    		console.log('2');
    	  break;
    	case '3':
    		tableId = $("#messageRechargehistory ").dataTable();  
    		console.log('3');
    	  break;
    	case '4':
    	  break;
    	case '5':
    		tableId = $("#messageTemplate ").dataTable();    
    		console.log('5');
    	  break;
    	default:
    		break;
    }
    	    
    复制代码

    给每个初始化datatable都添加fnDrawCallback属性,这里为其中之一

    	// 初始化群发记录dataTable
    	var $groupMessageHistory = $('#groupMessageHistory');
    	var _groupMessageHistory = $groupMessageHistory.dataTable($.extend(true, {}, CONSTANT.DATA_TABLES.DEFAULT_OPTION, {
    		//ajax配置为function,手动调用异步查询
    	    ajax : function(data, callback, settings) {
    		    // 分页参数
    	    	var param = getPagingParameters(data); 
                $.ajax({
    				type : "GET",
    				url : "你的地址",
    				cache : false, //禁用缓存
    				data : param, //传入已封装的参数
    				dataType : "json",
    				success : function(result) {
    					//异常判断与处理
    					if (result.errorCode) {
    						//$.dialog.alert("查询失败。错误码:" + result.errorCode);
    						toastr.error("查询失败。错误码:"+ result.errorCode);
    						return;
    					}
    
    					//封装返回数据,这里仅演示了修改属性名
    					var returnData = {};
    					returnData.draw = data.draw;//这里直接自行返回了draw计数器,应该由后台返回
    					recordsTotal = returnData.recordsTotal = result.data.totalCount;
    					returnData.recordsFiltered = result.data.totalCount;//后台不实现过滤功能,每次查询均视作全部结果
    					returnData.data = result.data.result;
    					//调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
    					//此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
    					callback(returnData);
    				},
    				error : function(XMLHttpRequest, textStatus, errorThrown) {
    					//$.dialog.alert("查询失败");
    					toastr.error("查询失败");
    				}
    			});
            },
            "fnDrawCallback": function () {  
                appendSkipPage();  
            },       
    		"columns" : [
            	{"data":"messageTitle"},
            	{"data":"messageContent"},
            	{"data":"createTime"},
            	{
    				"data" : "status",
    				"render" : function(data, type, row, full) {
    					return row.sendNumber + "/" + row.successNumber;
    				}
    			},
    			{
    				"data" : "errmsg",
    				"render" : function(data, type, row, full) {
    					if(row.errmsg != null && row.errmsg != ""){
    						return row.errmsg;
    					}else{
    						return "-";
    					}
    				}
    			},
    			{"data":null}
            ],
            "columnDefs" : [ {
    			"targets" : 5,
    			"data" : "id",
    			"orderable" : false,
    			"render" : function(data, type,full) {
    				var html = "查看  |  导出";
    				return html;
    			}
    		} ],
    		//"order": [[ 0, "desc" ]],
    		"ordering" : false,
    		"dom": 'tl<"float_left"i>p',//设置插件的位置
    	})).api();//此处需调用api()方法,否则返回的是JQuery对象而不是DataTables的API对象
    	// 为pagechange增加监听器,传递page参数到服务器进行分页处理
    	$groupMessageHistory.on('page.dt', function() {
    		page = _groupMessageHistory.page.info().page;
    	});
    	// 当length.dt改变时解决分页错误的情况
    	$groupMessageHistory.on('length.dt', function() {
    		page = 0;
    	});
    复制代码

    实现分页

    // 分页
    function appendSkipPage() {  
    	$('.paginate_jump').remove();
        var node=  
            $("
  • " + "
    " + " 跳转到" + " " + "
    "
    + "
  • "
    ); node.find(".form-control").keyup(function(e){ if(e.keyCode==13){ if($(this).val() && $(this).val()>0){ var redirectpage = $(this).val()-1; }else{ var redirectpage = 0; } tableId.fnPageChange( redirectpage ); } }); $("ul.pagination").append(template); }; 复制代码

    完工。

    你可能感兴趣的:(javascript,json,ViewUI)