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

本文介绍了如何修改dataTables.bootstrap.js和jquery.dataTables.js源文件,为dataTables添加输入指定页数直接跳转的功能。在for循环外部添加输入框,并在fnDrawCallback中绑定事件,监听回车键触发跳转。对于页面中存在多个表格的情况,可通过设置不同的table表格id解决分页跳转问题。

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

if ( btnDisplay ) {
    node = $('<li>', {
            'class': classes.sPageButton+' '+btnClass,
            'id': idx === 0 && typeof button === 'string' ?
                settings.sTableId +'_'+ button :
                null
        } )
        .append( $('<a>', {
                '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();
    $("<input type=\"text\" style=\"width: 50px;height: 30px;border-radius: 4px 4px 4px 4px;\" id=\"redirect\" class=\"redirect\">").appendTo( container );
    $('#redirect').css({
  
  "outline":"none","margin-left":"5px","margin-right":"5px","position":"absolute","right":"80px"});
}

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

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

"fnDrawCallback": 
<think>好的,我需要解决用户关于分页功能中输入页码超过最大页码的问题。首先,我得理解用户的具体需求。用户提到在分页跳转时,如果输入的页码超过了总页数,需要处理这种情况。这可能涉及到前端和后端的验证,以及用户体验方面的考虑。首先,我应该考虑前端如何处理输入。用户在输入页码后,无论是通过回车还是点击按钮跳转,前端都应该先验证这个数字是否有效。比如,是否大于零,是否超过总页数。如果超过的话,通常的做法是自动跳转到最后一页,或者给出错误提示,让用户重新输入。这需要在前端代码中加入验证逻辑。接下来,后端也需要进行验证,即使前端已经做了处理,但为了防止绕过前端的恶意请求,后端必须再次检查请求的页码是否合法。如果页码无效,后端应该返回错误信息或者默认返回最后一页的数据。这能确保系统的健壮性。然后,用户体验方面,当用户输入超过最大页码时,应该给予明确的反馈。比如,弹出一个提示框,或者自动修正为最大页码并跳转。同时,在输入框旁边显示总页数,让用户清楚知道范围,避免输入错误。此外,输入框可以限制只能输入数字,避免非数字字符的输入,比如使用HTML的number类型或者正则表达式过滤。 现在,我需要参考用户提供的引用内容。引用[1]中的iViewUI示例,通过按钮触发跳转,可以在点击事件中加入验证逻辑。比如,在goElevatorPage方法中检查输入的页码是否超过总页数,如果超过则设置为最后一页。引用[2]中的datatables示例,在fnDrawCallback函数中处理分页,同样可以在Go按钮的点击事件中加入验证,确保输入的页码在合理范围内。 另外,输入框的UI设计也很重要。比如,在输入框旁边显示总页数,或者使用placeholder提示用户输入范围。例如:“请输入1-{{pageTotal}}之间的页码”。这能减少用户输入错误的可能性。对于自动修正的情况,当用户输入超过最大页码时,系统自动跳转到最后一页,并更新当前页码显示。这需要在前端代码中获取总页数,并在跳转前比较输入的页码,如果超过则替换为总页数。最后,可能需要考虑不同框架或库的具体实现方式。比如,在Vue中使用iView的分页组件,可以通过监听跳转按钮的点击事件,获取输入值并进行处理。而在使用jQuery的datatables时,可以在fnPageChange之前进行验证,调整页码参数。 总结一下,解决方案应包括前后端的验证、用户提示、输入限制以及自动修正。同时,参考现有的实现案例,确保代码的正确性和兼容性。需要分步骤实现,从前端输入处理到后端验证,再到用户反馈,每个环节都要考虑周全,以提供良好的用户体验和系统稳定性。</think>### 分页跳转页码超限解决方案 #### 1. **前端输入验证** - **输入范围限制**:在输入框绑定事件(如`@keyup.enter`或按钮点击),检查输入值是否大于总页数(`pageTotal`)。若超出,自动修正为最大页码并跳转: ```javascript function handlePageJump(inputPage) { const targetPage = Math.min(Math.max(1, inputPage), pageTotal); if (inputPage !== targetPage) { alert(`页码超出范围,已跳转到第${targetPage}页`); } jumpToPage(targetPage); // 调用分页跳转方法 } ``` 引用[^1]中的`@click="goElevatorPage"`可在此事件中嵌入验证逻辑。 - **UI提示优化**:在输入框旁动态显示总页数,例如: ```html <span>共{{pageTotal}}页</span> <input type="number" min="1" :max="pageTotal" /> ``` 结合引用[^1]的`Page`组件,可通过`:total`属性同步更新总页数。 #### 2. **后端双重校验** - **参数合法性检查**:接收前端请求时,需校验`pageNo`是否在`1 ≤ pageNo ≤ totalPage`范围内。若超出,返回最后一页数据或错误码: ```java // Java示例(Spring Boot) @GetMapping("/data") public ResponseEntity<?> getData(@RequestParam int pageNo) { int validPageNo = Math.min(pageNo, totalPage); validPageNo = Math.max(validPageNo, 1); return ResponseEntity.ok(queryData(validPageNo)); } ``` #### 3. **用户体验增强** - **自动修正与反馈**:若用户输入`999`但总页数为`100`,直接跳转至第`100`页并显示提示信息,如: ```javascript // 结合引用[^2]的datatables回调 fnPageChange: function(pn) { if (pn >= totalPage) { showToast("已到达最后一页"); } } ``` - **输入框类型限制**:使用`<input type="number">`禁止非数字输入,并设置`min`和`max`属性: ```html <input type="number" min="1" :max="pageTotal" placeholder="输入1-{{pageTotal}}" /> ``` #### 4. **框架适配方案** - **iView分页组件**:在`@click="goElevatorPage"`事件中获取输入值并校验: ```javascript goElevatorPage() { let inputPage = parseInt(this.inputValue); inputPage = Math.min(inputPage, this.pageData.pageTotal); this.$refs.myPage.currentPage = inputPage; // 修正当前页 } ``` 引用[^1]的`Page`组件通过`ref="myPage"`可访问内部状态。 - **DataTables插件**:在`fnPageChange`前拦截请求: ```javascript // 引用[^2]的扩展代码 $("#tblb_listTablexian_paginate li").find("a").click(function() { let pn = parseInt($("input").val()) || 1; pn = Math.min(pn, oTable.fnSettings()._iRecordsDisplay); oTable.fnPageChange(pn - 1); // API从0开始计数 }); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值