使用PHP+JQuery+Ajax分页的实现


Posted in Javascript onApril 23, 2013

为了锻炼下JQuery,决定自己动手写写分页

最终的效果如图:

点击某个字母后,下方显示以该字母为首字母的所有词语;

分页显示,每页显示15个词语,每组页码有20个,1-20/20-40~~~

使用PHP+JQuery+Ajax分页的实现

首先是在PHP文件中的分页Pager的相关代码

        public function searchWordsByInitial()
 {   
            //从AJAX发出的URL中获得参数:用户点击的字母和点击的页码
            $initial = htmlentities($_POST['initial'], ENT_QUOTES,"UTF-8");
            $page = htmlentities($_POST['page'], ENT_QUOTES,"UTF-8");
            $words = $this->_createWordObj();
            $i=0;//用于显示序号从1开始
            $perPageNum=12;//每一页显示的条数为12条
            $currentPageFirst=($page-1)*$perPageNum+1;
            $currentPageLast=$page*$perPageNum;
            //获取总记录数
            $sumNum=0;
            foreach ( $words[$initial] as $key=> $word ){
                $sumNum++;
            }
            //获取总页数
            $pageNums=0;
            if( $sumNum ){
               if( $sumNum < $perPageNum ){ $pageNums = 1; }               //如果总数据量小于$PageSize,那么只有一页
               if( $sumNum%$perPageNum ){                                  //取总数据量除以每页数的余数
                   $pageNums = (int)($sumNum/$perPageNum) + 1;           //如果有余数,则页数等于总数据量除以每页数的结果取整再加一
               }else{
                   $pageNums = $sumNum/$perPageNum;                      //如果没有余数,则页数等于总数据量除以每页数的结果
               }
            }
            else{
               $pageNums = 0;
            }
           
        //Pager显示
            echo $this->init_searchWordsByInitial_Pager($sumNum,$pageNums,$page);  

            $tab_str.="<table ……………………这里是页面的具体内容………………"
            return $tab_str;
    }

    public function init_searchWordsByInitial_Pager($sumNum,$pageNums,$page)
    {
            //根据用户点击的页码,获得当前页码组的首页码,如用户点击的38,那么这一组是21-40,首页码是21
            $current_first_page=floor(($page-1)/20)*20+1;            $tab_str="<div id='searchWordsByInitial_Pager' class='pagination pagination-centered'><ul>";
   for($k=0;$k<=19;$k++)
   {
                $j=$k+$current_first_page;
    $tab_str.="<button class='not_more_btn'>".$j."</button>";
   }
   $tab_str.="</ul>   一共<span id='sumNums'>".$sumNum."</span>个词语,<span id='pageNums'>".$pageNums."</span>页</div>";
            return $tab_str;
    }

init.js   相关的JQuery代码,响应用户的动作
//初始化分页 Pager    var pageNums;//总页数
    var sumNums;//总记录数
      function init_searchWordsByInitial_Pager(){

            pageNums=$("#pageNums").html();//JS从页面HTML获取
            sumNums=$("#sumNums").html();
            if(pageNums==1)//如果只有一页,则隐藏Pager
            {
                $("#searchWordsByInitial_Pager").html("</br>");
            }
            //让页码的默认值为1,默认显示的是第一页;
            if(page_initial==undefined){ page_initial=1;}
            //当页面过多时,我们一组只显示20个页码,后面缀一个NEXT按钮,点击后可以显示后面20个页码;同样,LAST按钮可以显示前面20个按钮
            $("#searchWordsByInitial_Pager ul button:eq(19)").after("<button id='more_forward' class='more'>Next</button>");
            $("#searchWordsByInitial_Pager ul button:eq(0)").before("<button id='more_backword' class='more'>Last</button>");
            //如果最后一组少于21页,那么就隐藏最后一个页码后面的,包括NEXT按钮【pageNums<21】
            //如果用户点击的page是最后20个page,那么也要隐藏最后一个页码后面的,包括NEXT按钮【offset<20】
            //(由于点击page会触发本初始化函数/其实可以将初始化函数的调用仅仅绑定到单击字母事件即可,不必跟Ajax动作绑在一起)
            
            var offset;
            offset=(Math.ceil(pageNums/20)*20)-parseInt(page_initial);
            if(pageNums<21||offset<20)
            {
                $("#searchWordsByInitial_Pager ul button").slice((pageNums%20)+1).hide();
            }
            //如果正好是20页,根据上一段代码,offset=19<20,会把整个Pager隐藏;需要再把它显示出来
            if(search_pageNums==20)
            {
                        $("#searchWords_Pager ul button.not_more_btn").show();
            }
            //如果当前组的第一个page是1,那么隐藏LAST按钮;否则显示LAST按钮,允许用户点击翻到上一组
            if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
            {
                        $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
            }
            else
            {
                        $("#searchWordsByInitial_Pager ul button:eq(0)").show();
            }
      }
        //单击NEXT按钮
        $("#more_forward").live("click",function(event){
                //只要有往后翻页,就会有 Last 按钮
                $("#searchWordsByInitial_Pager ul button:eq(0)").show();
                //让每一个page都自加20,如1-20变为21-40
                for(i=0;i<20;i++){
                    $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())+20);
                    //隐藏最后一个页码后面的按钮
                    if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html()==pageNums)
                    {
                            $("#searchWordsByInitial_Pager ul button").slice(i+2).hide();
                    }
                        
               }
              })

        //单击LAST按钮
        $("#more_backword").live("click",function(event){
                //首先要让20个按钮都显示出来
                $("#searchWordsByInitial_Pager ul button").show();
                for(i=0;i<20;i++){
                    $("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html(parseInt($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(i).html())-20);
               }
                //判断是否要隐藏Last按钮
                if($("#searchWordsByInitial_Pager ul button.not_more_btn").eq(0).html()==1)
                {
                        $("#searchWordsByInitial_Pager ul button:eq(0)").hide();
                }
                else
                {
                        $("#searchWordsByInitial_Pager ul button:eq(0)").show();
                }
              })
        
   
   //获取用户点击的字母
   $(".initial-button-list button").live("click", function(event){
            //清除所有字母A-Z按钮的active class,并且设置点击的字母按钮为 active;这里不要使用 .attr 和 .removeAttr;
            $(".initial-button-list button").removeClass("active");
            $(this).addClass("active");
            
            //获取当前点击的字母和页码
            initial_value = $(this).html();
            page_initial=1;
            //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
            btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
            $.ajax({
               type: "POST",
               url: processFile,
               data: btnData,
               success: function(data) {
                    $("#word_table_by_initials").show();
                    $("#word_table_by_initials").html("");
                    $("#word_table_by_initials").html(data);
                    init_searchWordsByInitial_Pager();
               },
                error: function(msg)
                {
                        alert(msg);
                }
            });
   });
   
   //获取用户点击的页码(除去点击 more 按钮)
   $("#searchWordsByInitial_Pager button.not_more_btn").live("click", function(event){
            //清除所有页码的active class,并且设置点击的页码为 active;这里不要使用 .attr 和 .removeAttr;
            $("#searchWordsByInitial_Pager button").removeClass("active");
            $(this).addClass("active");
            //获取当前点击的页码
            page_initial=$(this).html();
            //将要传送的参数拼串 &action=list_by_initial&initial=O&page_initial=3
            btnData = "&action=list_by_initial"+ "&initial="+initial_value+"&page="+page_initial;
            $.ajax({
               type: "POST",
               url: processFile,
               data: btnData,
               success: function(data) {
                    $("#word_list_by_initials").hide();
                    $("#word_table_by_initials").html("");
                    $("#word_table_by_initials").html(data);
                    init_searchWordsByInitial_Pager();
               },
                error: function(msg)
                {
                        alert(msg);
                }
            });
   });    
});

一些注意事项:

1,$("div button.not_more_bt")中,前两个选择器之间是有空格 的,后两个没有;因为最后一个是 类选择器,要直接跟在button后面

2,.html() .val() .text()  的区别

3,:eq(index),:lt(index);gt(index) 中的 index 是从0开始,而且不能为变量,必须为 数字

如果需要让用到动态的 index,可以用

.eq(i)

4,var a=20;

var b=10;

var c;

c=a+b;

结果不是 30!是2020!

正确的写法是 c=parseInt(a)+_parseInt(b);

减法没事,但是最好也要转化一下

PHP 的 函数是 intval();

5,写代码之前,一定要规划好最优的方案,否则重头来就更费事了

6,JS代码和HTML加载的逻辑顺序

Javascript 相关文章推荐
javascript中创建对象的三种常用方法
Dec 30 Javascript
js数组转json并在后台对其解析具体实现
Nov 20 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
Jan 23 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
jquery delay()介绍及使用指南
Sep 02 Javascript
微信小程序request出现400的问题解决办法
May 23 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 jQuery
vue.js实现的绑定class操作示例
Jul 06 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
vue webpack开发访问后台接口全局配置的方法
Sep 18 Javascript
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 #Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 #Javascript
js事件冒泡实例分享(已测试)
Apr 23 #Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 #Javascript
js判断生效时间不得大于失效时间的思路及代码
Apr 23 #Javascript
修改file按钮的默认样式实现代码
Apr 23 #Javascript
js随机颜色代码的多种实现方式
Apr 23 #Javascript
You might like
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
php异常处理方法实例汇总
2015/06/24 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
JS实现拼图游戏
2021/01/29 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
python进阶教程之循环对象
2014/08/30 Python
Python实现子类调用父类的方法
2014/11/10 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python编码类型转换方法详解
2016/07/01 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
python读取文件名并改名字的实例
2019/01/07 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
高级方案规划工程师岗位职责
2013/11/29 职场文书
班主任班级寄语大全
2014/04/04 职场文书
五四青年节的活动方案
2014/08/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
vue3中provide && inject的使用
2021/07/01 Vue.js
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
oracle数据库去除重复数据
2022/05/20 Oracle