【jQuery 分頁】jQuery分頁功能的實現


自寫的jQuery實現分頁功能的分頁組件:

功能效果如下:

 

分頁組件就是上圖中的三部分, 分別放在表格上部  和下部 。

其中,

1》》》頁面的代碼如下:

product.jsp

其中引用bootstrap.css  和bootstrap .js是必須的

  1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=UTF-8"%>
  2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3 
  4 
  5 <%
  6 String path = request.getContextPath();
  7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  8 %>
  9 <!DOCTYPE HTML>
 10 <html>
 11 <head>
 12 <meta charset="utf-8">
 13 <meta name="renderer" content="webkit|ie-comp|ie-stand">
 14 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 15 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
 16 <meta http-equiv="Cache-Control" content="no-siteapp" />
 17 
 18 <link href="../css/H-ui.min.css" rel="stylesheet" type="text/css" />
 19 <link href="../css/H-ui.admin.css" rel="stylesheet" type="text/css" />
 20 <link href="../css/style.css" rel="stylesheet" type="text/css" />
 21 <link href="../lib/Hui-iconfont/1.0.1/iconfont.css" rel="stylesheet" type="text/css" />
 22 <link href="../css/bootstrap.min.css" rel="stylesheet" type="text/css" />
 23 
 24 <title>產品列表</title>
 25 <style type="text/css" >
 26     .pageInfo{
 27      display: inline;
 28     }
 29 </style>
 30 </head>
 31 <body>
 32 
 33 <nav class="breadcrumb" style="padding: 0px 1px 20px 0px;margin-bottom: 0px;"><i class="Hui-iconfont">&#xe67f;</i> 首頁 <span class="c-gray en">&gt;</span> 基因信息管理 <span class="c-gray en">&gt;</span> 產品列表 <a class="btn btn-success radius r mr-20" style="line-height:1.6em;margin-top:3px" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a></nav>
 34 
 35 <div class="pd-20">
 36   <div class="text-c"> 
 37     <select class="select" id="" name="" style="width:250px">
 38       <option value="0">產品</option>
 39       <option value="AccountInfo">基因型</option>
 40       <option value="AdminInfo">關鍵字</option>
 41     </select>
 42     <button name="" id="" class="btn btn-success" type="submit"><i class="Hui-iconfont">&#xe665;</i> 查詢</button>
 43   </div>
 44 </div>
 45     <div class="cl pd-5 bg-1 bk-gray mt-20"> 
 46         <span class="l"><a href="javascript:;"  class="btn btn-danger radius"><i class="Hui-iconfont">&#xe6e2;</i> 批量刪除</a> 
 47         <a class="btn btn-primary radius"  href="javascript:;"><i class="Hui-iconfont">&#xe600;</i> 添加產品</a></span> 
 48     </div>
 49     
 50     
 51     <!-- 分頁 + table  從這里開始     由於樣式采用bootstrap,所以class樣式盡量使用一致的 -->
 52     <div class="container">
 53         <!-- 分頁的第一部分    開始 -->
 54         <div class="row" style="margin: 20px 0px 5px 10px;">
 55             <label class="pageInfo">每頁顯示 </label> 
 56             <select class="form-control pageInfo" style="width: 20%">
 57                 <option>5</option>
 58                 <option selected="selected">10</option>
 59                 <option>20</option>
 60                 <option>50</option>
 61                 <option>100</option>
 62             </select> 
 63             <label class="pageInfo"></label> 
 64         </div>
 65         <!-- 分頁的第一部分    結束 -->
 66         <!-- table部分 開始 -->
 67         <div class="row"><!-- 采用樣式row 分成一層  一層   -->
 68             <table class="table table-hover table-bordered table-bg">
 69                 <thead>
 70                     <tr class="text-c">
 71                         <th width="25"><input type="checkbox"  id="ch1">全選</th>  
 72                         <th width="80">產品名稱</th>
 73                         <th width="280">操作</th>
 74                     </tr>
 75                 </thead>
 76                 <tbody>
 77                 </tbody>
 78             </table>
 79         </div>
 80         <!-- table 部分結束 -->
 81         <!-- 分頁  第二部分 開始 -->
 82         <div class="row">
 83             <!-- 第二部分左邊部分開始 -->
 84             <div class="pageInfo pull-left" style="position: relative;top: 32px; font-family: Times New Roman;">當前顯示第<label class="startInfo"></label>條到第<label class="endInfo"></label> 條,總共<label class="totalInfo"></label></div>
 85             <!-- 第二部分右邊部分 開始 -->
 86             <div class="pageInfo pull-right">
 87                 <nav >
 88                     <ul class="pagination">
 89                         <li>
 90                           <a href="#" aria-label="Previous" style="display: none">
 91                             <span aria-hidden="true">&laquo;</span>
 92                           </a>
 93                         </li>
 94                         <li class="active"><a href="#">1</a></li>
 95                         <li>
 96                           <a href="#" aria-label="Next">
 97                             <span aria-hidden="true">&raquo;</span>
 98                           </a>
 99                         </li>
100                      </ul>
101                 </nav>
102             </div>
103         </div>
104         <!-- 分頁第二部分 結束 -->
105     </div>
106 
107 <script type="text/javascript" src="../lib/jquery/1.9.1/jquery.min.js"></script> 
108 <script type="text/javascript" src="../lib/layer/1.9.3/layer.js"></script> 
109 <script type="text/javascript" src="../lib/My97DatePicker/WdatePicker.js"></script> 
110 <script type="text/javascript" src="../js/bootstrap.min.js"></script> 
111 <script type="text/javascript" src="../lib/datatables/1.10.0/jquery.dataTables.min.js"></script> 
112 <script type="text/javascript" src="../js/H-ui.js"></script> 
113 <script type="text/javascript" src="../js/H-ui.admin.js"></script>
114 <script type="text/javascript" src="../js/pageSet.js"></script>
115 <script type="text/javascript" src="../js/geneinfo/product/product.js"></script>
116 </body>
117 </html>
View Code

 

2》》》分頁組件的js文件

pageSet.js

  1 var page = {}; // 定義分頁類
  2 (// 這里用大括號將整個的類 包括【本類的屬性定義】【本類的方法】 整體括起來,是讓本類在頁面加載的時候就運行
  3 
  4 // tt這個類的字段定義
  5 function() {
  6     page.bindData;
  7     page = function page(url, bindData) {
  8         this.pageNo = 1; // 當前頁 初始值為1
  9         this.pageSize = 10; // 當前頁顯示多少條
 10         this.startInfo = 1; // 開始條數
 11         this.endInfo = 10; // 結束條數
 12         this.totalPage = 0; // 總頁數
 13         this.totalInfo = 0; // 總條數
 14         this.tempLi = "<li><a href='#'></a></li>"; // 用於添加頁碼處使用
 15         this.url = url; // 用於不同頁面的請求地址
 16         this.result = null; // 用於可能僅需要正文數據時使用
 17         this.bindData = bindData;
 18         this.init();
 19         return this;
 20     }
 21 
 22     // 根據初始化的參數 bindData()綁定參數的方法 page初始化的對象 來請求后台,傳回 新的page信息
 23     page.prototype.pageSet = function() {
 24         $.post(page.url, {
 25             "pageNo" : page.pageNo,
 26             "pageSize" : page.pageSize
 27         }, function(data) {
 28             result = null;
 29             data = eval("(" + data + ")");
 30             if (data != null && data != "" && data != undefined) {
 31                 page.pageNo = data.pageNum == 0 ? 1 : data.pageNum;
 32                 page.pageSize = data.pageSize == 0 ? page.pageSize : data.pageSize;
 33                 page.startInfo = data.pageNum == 0 ? 0 : (page.pageNo - 1) * page.pageSize + 1;
 34                 page.endInfo = page.startInfo + page.pageSize - 1;
 35                 page.endInfo = page.endInfo >= data.total ? data.total : page.endInfo;
 36                 page.totalPage = data.pages;
 37                 page.totalInfo = data.total;
 38                 page.result = data.list;
 39             }
 40             // 執行綁定參數的方法
 41             bindData();
 42             // 如果總頁數 <=1 隱藏下一頁
 43             if (page.totalPage <= 1) {
 44                 $("a[aria-label='Next']").hide();
 45             }
 46         });
 47     }
 48 
 49     // 設置分頁組件的 一些信息 eq:總共多少條 顯示第幾條~第幾條 動態顯示頁碼
 50     page.prototype.setValue = function() {
 51         $("label.startInfo").text(page.startInfo); // 為此三個元素賦值
 52         $("label.endInfo").text(page.endInfo);
 53         $("label.totalInfo").text(page.totalInfo);
 54         var temp = "";
 55         if (page.totalPage != 0) { // 首先保證總頁數不是0頁
 56             $(".pagination li").removeClass("active"); // 移除掉之前的 當前頁面 頁碼按鈕的
 57                                                         // 選中狀態
 58             if (page.totalPage <= 5
 59                     && $(".pagination li").length != page.totalPage + 2) {             // 【初始化總頁數小於5頁的情況】此處規定下面顯示的頁數就是5頁 如果總頁數<5則全部顯示》》》$(".pagination li").length !=page.totalPage + 2保證不會重復疊加
 60                 for (var i = 0; i < page.totalPage - 1; i++) {                          // 總頁數<5,則全部添加
 61                     temp += $(page.tempLi).find("a").text(i + 2).parent().prop("outerHTML");                                              // 為tempLi變量中的a標簽添加頁碼數 然后找到a標簽的父層
 62                                                                                      // 此時的它是Object類型,需要通過prop("outerHTML")這個屬性,獲取到HTML代碼,這樣才能用於追加進頁面 【 原生JS DOM里有一個內置屬性outerHTML】
 63                 }
 64                 page.cleanUp();
 65                 $(".pagination li").eq(1).after(temp);                                  // 並將動態生成的頁碼按鈕的HTML代碼
 66                                                                                      // 添加到li的第二個之后
 67                                                                                        // 【這里是eq(1)第二個是因為(上一頁)這個按鈕雖然屬性設為隱藏,但是依舊存在;而默認的還有一個第一頁這個頁碼是存在的。所以是兩個li,所以是eq(1)】
 68             } else {                                                                  // 否則,是總頁數>5的
 69                 var absCon = Math.abs($(".pagination li").eq(3).text()- page.pageNo); // 先獲取eq(3)也就是 中間位置的頁碼-當前頁
 70                                                                                         // 【點擊中間頁碼 靠后的頁碼按鈕的情況】如果當前頁>中間位置的頁碼數 && 中間位置的.length !=0 &&
 71                                                                                         // (除了最后一個頁碼li之外的的最后一個li的文本)也就是倒數第二個的文本!=總頁數 【這里的判斷條件就是
 72                                                                                         // 如果點擊的是中間位置靠后的頁碼 eq:12345中的4或者5的話】 條件成立
 73                 if (page.pageNo > $(".pagination li").eq(3).text()
 74                         && $(".pagination li").eq(3).length != 0
 75                         && $(".pagination li:not(:last):last").text() != page.totalPage) {
 76                     absCon = page.totalPage - page.pageNo >= absCon ? absCon
 77                             : page.totalPage - page.pageNo; // 【當前頁就是即將要顯示的頁碼】如果
 78                                                             // 總頁數-當前頁>absCon
 79                                                             // 那么就給absCon原本的值,否則就將總頁數-當前頁的值賦值給absCon
 80                     for (var i = 0; i < absCon; i++) { // 此處absCon的作用:
 81                                                         // 點擊中間位置靠后的頁碼數,可能即將顯示的當前頁
 82                                                         // 是最后一頁了,那就不再添加新的頁碼出來了【eq:總共9頁,即將顯示的是第9頁,那9這個頁碼之后就不再新增加頁碼了】
 83                         // 然后將新增加的頁碼添加在最后一個li【此處的最后一個li是下一頁按鈕】之前
 84                         // ;要添加的內容就是新生成的li的HTML文本 【eval($(".pagination
 85                         // li").eq($(".pagination li").length - 2).text())+1
 86                         // 這里使用eval()將其中的內容括起來是為了獲取到的值直接和1相加】
 87                         $(".pagination li").last().before(
 88                                 $(page.tempLi).find("a").text(
 89                                         eval($(".pagination li").eq(
 90                                                 $(".pagination li").length - 2)
 91                                                 .text()) + 1).parent().prop(
 92                                         "outerHTML"));
 93                         $(".pagination li").eq(1).remove(); // 並且在循環中始終刪除eq(1)也就是前一頁按鈕之后的第一個頁碼
 94                     }
 95                 } else { // 【初始化 頁數大於5頁的情況】如果 當前頁面上的li【包括上一頁,下一頁總共7個頁碼按鈕】!=7個
 96                             // && 當前頁面上的li個數 !=總頁數+2 【此處的總頁數是后台返回的總頁數】
 97                     if ($(".pagination li").length != 7
 98                             && $(".pagination li").length != page.totalPage + 2) {
 99                         for (var i = 0; i < 4; i++) {
100                             temp += $(page.tempLi).find("a").text(i + 2)
101                                     .parent().prop("outerHTML");
102                         }
103                         $(".pagination li").eq(1).after(temp.toString());
104                         // 【點擊 中間頁碼靠前頁碼的情況】如果當前頁<中間位置的頁碼 && 上一頁按鈕之后的頁碼按鈕>=2
105                         // 【即點擊的中間頁碼按鈕靠前的頁碼按鈕】
106                     } else if (page.pageNo < $(".pagination li").eq(3).text()
107                             && $(".pagination li").eq(1).text() >= 2) {
108                         absCon = page.pageNo - 1 > absCon ? absCon
109                                 : page.pageNo - 1;
110                         for (var i = 0; i < absCon; i++) {
111                             $(".pagination li").first().after(
112                                     $(page.tempLi).find("a").text(
113                                             eval($(".pagination li").eq(1)
114                                                     .text()) - 1).parent()
115                                             .prop("outerHTML"));
116                             $(".pagination li").eq(
117                                     $(".pagination li").length - 2).remove(); // 靠后的頁碼按鈕
118                                                                                 // 【此處-2是將上一頁
119                                                                                 // 下一頁兩個按鈕去掉】
120                         }
121                     }
122 
123                 }
124             }
125             
126             //刪除或者新增信息的時候,頁碼可能動態變化
127             if($(".pagination li:not(:last):last").text() > page.totalPage) {
128                 $(".pagination li:not(:last):last").remove();
129                 if(page.pageNo == page.totalPage) {
130                     $("a[aria-label='Next']").hide();
131                 }
132                 if($(".pagination li:not(:first):first").text() > 1) {
133                     $(".pagination li:first").after($(page.tempLi).find("a").text(parseInt($(".pagination li:not(:first):first").text()) - 1).parent().prop("outerHTML"));
134                 }
135             }
136             
137             //上一頁 下一頁  的隱藏與顯示
138             if($(".pagination li:not(:last):last").text() > page.pageNo) {
139                 $("a[aria-label='Next']").show();
140             } else {
141                 $("a[aria-label='Next']").hide();
142             }
143             
144             if($(".pagination li:not(:first):first").text() < page.pageNo) {
145                 $("a[aria-label='Previous']").show();
146             } else {
147                 $("a[aria-label='Previous']").hide();
148             }
149 
150             $(".pagination li:contains(" + page.pageNo + ")")
151                     .addClass("active"); // 為 新的 當前頁 頁碼按鈕 添加 active選中狀態
152         }
153     }
154 
155     // 初始化方法 頁碼的點擊事件 上下頁點擊事件 每頁顯示多少條的 改變事件
156     page.prototype.init = function() {
157         $("a[aria-label='Previous']").click(function() {
158             $("a[aria-label='Next']").show();
159             if (page.pageNo == 2) {
160                 $("a[aria-label='Previous']").hide();
161             } else {
162                 $("a[aria-label='Previous']").show();
163             }
164             if (page.pageNo == 1) {
165                 return;
166             }
167             page.pageNo--;
168             page.pageSet(bindData, page);
169         });
170 
171         // 綁定 下一頁 的點擊事件
172         $("a[aria-label='Next']").click(function() {
173             $("a[aria-label='Previous']").show();
174             if (page.pageNo == page.totalPage - 1) {
175                 $("a[aria-label='Next']").hide();
176             } else {
177                 $("a[aria-label='Next']").show();
178             }
179             page.pageNo++;
180             page.pageSet(bindData, page);
181         });
182 
183         // 上面的.click()綁定點擊事件 和 下面的 $(document).on("click",".pagination
184         // li:gt(0):not(:last)",function(){});的區別在於:
185         // .click只能為頁面現有的元素綁定點擊事件,如果是動態生成的新的元素,是沒有事件的
186         // 而$(document).on("click","指定的元素",function(){});方法則是將指定的事件綁定在document上,而新產生的元素如果符合指定的元素,那就觸發此事件
187 
188         // 為動態生成的 頁碼按鈕 添加 點擊事件
189         $(document).on("click", ".pagination li:gt(0):not(:last)", function() {
190             page.pageNo = $(this).text();
191             $("a[aria-label='Previous']").show();
192             $("a[aria-label='Next']").show();
193             if (page.pageNo == "1") {
194                 $("a[aria-label='Previous']").hide();
195             }
196             if (page.pageNo == page.totalPage) {
197                 $("a[aria-label='Next']").hide();
198             }
199 
200             page.pageSet(bindData, page);
201         });
202 
203         // 為select 選擇每頁顯示多少條 添加改變時間 【但是這不使用change而是使用input 是因為change對IE瀏覽器不支持】
204         $(".pageInfo").on(
205                 "input",
206                 function() {
207                     page.pageSize = $(this).val();
208                     page.pageNo = 1;
209                     $("a[aria-label='Previous']").hide();
210                     $(".pagination li:not(:first):not(:last)").remove();
211                     // $(".pagination li:not(:first), .pagination
212                     // li:not(:last)").remove();
213                     $(".pagination li:first").after(
214                             "<li class='active'><a href='#'>1</a></li>");
215                     page.pageSet(bindData, page);
216                 });
217 
218     }
219 
220     /**
221      * 清除頁碼部分,回到初始化狀態
222      */
223     page.prototype.cleanUp = function() {
224         $("a[aria-label='Previous']").hide();
225         $("a[aria-label='Next']").show();
226         $(".pagination li:gt(0):not(:last)").remove();
227         $(".pagination li:eq(0)").after("<li><a href='#'>1</a></li>");
228     }
229 
230 })();
View Code

 

3》》》本頁面的js中  需要提供數據的封裝功能 bindDate()方法,【並且注意,任何頁面發生變化的地方都需要調用分頁的page.pageSet();方法,例如數據的增加,數據的刪除,還有page對象初始化,頁面初始化的時候就是這幾個地方需要調用】

    3.1》》》product.js中的page對象初始化也就是在頁面初始化的時候+刪除操作的時候

  1 var indexProductAdd;//定義一個index作為產品添加彈出窗的layer打開返回值 ,用於關閉的時候使用
  2 var indexProductUpdate; //定義一個index作為添加產品的彈出框的返回值
  3 var product;
  4 var page;
  5 var bindData;
  6 
  7 $(document).ready( function () {
  8     
  9     /**
 10      * 查詢類型 【eq:產品:product   疾病:disease   基因:gene 】
 11      */
 12     var queryType;
 13     
 14     /**
 15      * 添加產品 頁面
 16      */
 17    
 18     $(".btn-primary").click( function(){
 19         indexProductAdd = layer.open({
 20             type: 2,
 21             title: "添加產品",
 22             content: 'productadd.htmls',
 23             area: ['500px', '580px']
 24         });
 25     });
 26     
 27     /**
 28      * updateproduct.htmls  更新 產品信息
 29      */
 30     $(document).on("click",".table-bordered tbody tr a[class='up']",function(){
 31         product = $.parseJSON( $(this).parents('tr').find("input").eq(1).val());
 32         $(this).parents('tr').find("input[type='checkbox']").prop("checked",true);//在點擊更新按鈕之后,勾選本行對應的checkbox
 33         indexProductUpdate    = layer.open({
 34             type: 2,
 35             title: "修改產品",
 36             content: 'updateproduct.htmls',
 37             area: ['500px', '580px'],
 38             end : function(){
 39                 $(".table-bordered tbody :checked").attr("checked",false);
 40             }
 41         });    
 42     });
 43     
 44     
 45     
 46     
 47     
 48     /**
 49      * 封裝數據 的方法 在本頁面的js中,
 50      */
 51     bindData = function bindData(){
 52         var result = page.result;
 53         $(".table-bordered tbody").empty();
 54         if(result != "" && result != null && result != undefined) {
 55             var temp = "";
 56             $.each(result, function(index, item) {
 57                 //JSON.stringify(item)  對象轉化字符串
 58                 temp += "<tr class='text-c'><td><input type='checkbox' value='"+item.productId+"'><input type='hidden' value='"+JSON.stringify(item)+"'/></td><td>"+item.productName+"</td><td><a href='disease.htmls?productId="+item.productId+"' class='check'>【查看疾病信息】</a><a href='JavaScript:void(0)' class='up'>【更新】</a></td></tr>";
 59             });
 60             $(".table-bordered tbody").append(temp);
 61         }
 62         page.setValue();
 63     }
 64     
 65     /**
 66      * 實例化一個分頁組件的 對象 
 67      */
 68     page = new page("queryAllProduct2.htmls", bindData);
 69     page.pageSet();
 70     
 71     
 72     
 73     /**
 74      * 批量刪除
 75      */
 76     $(".btn-danger").click(function(){
 77         var productId = [];
 78         $(".table-bordered tbody :checked").each(function(index,item){    //注意:checked前面需要空格
 79             productId.push(item.value);                                //數組中添加數據 需要push()
 80         });
 81         
 82         if(productId.length == 0){
 83             layer.msg('請選擇至少一條記錄!', {
 84                   icon: 3,
 85                   time: 2000 //2秒關閉(如果不配置,默認是3秒)
 86                 }, function(){
 87                   //do something
 88                 });
 89             return;
 90         }else{
 91             $.post("productDelete.htmls?productId="+productId, function(data){
 92                 if(data){
 93                    layer.msg('刪除成功!', {
 94                       icon: 1,
 95                       time: 2000 //2秒關閉(如果不配置,默認是3秒)
 96                     }, function(){
 97                       //do something
 98                     });
 99                    
100 //                  page.cleanUp();
101                   if($(".table-bordered tbody :checked").length == $(".table-bordered tbody tr").length && page.pageNo>1){//若本頁全部刪除
102                       page.pageNo--;
103                   }
104                   page.pageSet(); 
105                 }else{
106                    layer.msg('刪除失敗!', {
107                       icon: 2,
108                       time: 2000 //2秒關閉(如果不配置,默認是3秒)
109                     }, function(){
110                       //do something
111                     });
112                 }
113                 $(".table-hover thead :checked").attr("checked",false);
114                 return;
115             });
116         }
117     });
118     
119     
120     
121    
122     
123     
124 } );
View Code

    3.2》》》productAdd.js中添加一條數據完成后

 1 $(document).ready( function () {
 2     
 3     //為添加產品的表單加驗證效果
 4     $('#form-product-add').bootstrapValidator();
 5     //$('#form-product-add').data('bootstrapValidator').validate();  //提交按鈕是sumbit
 6     //$('#form-product-add').data('bootstrapValidator').isValid();      //提交按鈕是button
 7     /**
 8      * 添加產品的按鈕
 9      */
10         $("#pAdd").click(function(){
11             $('#form-product-add').bootstrapValidator('validate');//為表單的添加按鈕  添加一個綁定表單的方法
12             var productName = $("input[name='productName']").val();
13             var productCre = $("textarea[name='productCre']").val();
14             var temp;
15             if(productName !="" ){
16                 $.ajax({url:"productAdd.htmls",
17                         type:"post",
18                         data:{
19                             "productName" : productName,
20                             "productCre" : productCre
21                         },
22                         success:function(data){
23                             
24                             if(data != null){
25                                  parent.page.pageSet(); 
26                             }    
27                             // var index = parent.layer.getFrameIndex(window.name); 可以用這個獲取當前要關閉的layer ,也可以使用parent.indexProductAdd 獲取在父層定義的那個layer。open()的彈窗
28                             parent.layer.close(parent.indexProductAdd); //獲取到layer的彈出窗 關閉它  
29                 }});
30                 
31             }
32             return false;//頁面的表達提交使用submit,然后又對這個提交按鈕綁定一個點擊事件,使用ajax來和后台進行交互,這個時候如果不return  false;會導致ajax提交一次,submit提交一次,這樣的錯誤不容易找出來,會表現出來:ajax執行成功但是時而會進回調函數,時而不會進入回調函數,
33         });
34         
35         /**
36          * 全選按鈕的 全選功能
37          */
38         $('table th input:checkbox').on('click' , function(){
39             var that = this;
40             $(this).closest('table').find('tr > td:first-child input:checkbox')
41             .each(function(){
42                 this.checked = that.checked;
43                 $(this).closest('tr').toggleClass('selected');
44             });
45         });    
46 } );
View Code

 

4》》》controller服務器中的處理方法

@Controller
@RequestMapping("geneInfo")
public class GeneInfoController {

 1 /**
 2      * 分頁查詢---查詢所有產品
 3      * @param model
 4      * @return
 5      */
 6     @RequestMapping("/queryAllProduct2")
 7     @ResponseBody
 8     public PageInfo<Product> queryAllProduct2(ModelMap model, int pageNo, int pageSize){
 9         Criteria criteria = getCurrentSession().createCriteria(Product.class);
10         return productService.findQuery(criteria ,pageNo , pageSize );
11     }
12     
View Code

5》》》Dao的實現層 的分頁實現

 1 @Override
 2     public PageInfo<T> findQuery(Criteria criteria, int pageNo, int pageSize) {
 3         try {
 4             Assert.isTrue(pageNo >= 1, "pageNO should start from 1");
 5             //拆分order by子句  
 6             Field field = CriteriaImpl.class.getDeclaredField("orderEntries");  
 7             field.setAccessible(true);  
 8             List<?> orderEntrys = (List<?>) field.get(criteria);  
 9             field.set(criteria, new ArrayList());  
10             //統計總數
11             long totalCount = countAll(criteria);
12             criteria.setProjection(null);
13             //統計完了再把order by子句加上 這樣保證了sql語句不會出錯
14             field.set(criteria, orderEntrys);
15             List<T> list = findPage(criteria, pageNo, pageSize);
16             if (totalCount < 1) {
17                 return new PageInfo<T>();
18             }
19             PageInfo<T> page = new PageInfo<T>();
20             page.setPageNum(pageNo);
21             page.setTotal(totalCount);
22             page.setPages((int) (totalCount / pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1));
23             page.setPageSize(pageSize);
24             page.setList(list);
25             return page;
26         } catch (Exception e) {
27             // TODO: handle exception
28             throw new QueryException("查詢出錯!");
29         }
30         
31     }
View Code

 

其中主要的思想 就是 將分頁組件 分離出來,僅作分頁處理。而數據的封裝則是在不同的頁面進行不同的封裝實現。然后封裝數據的方法作為參數傳遞給分頁對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM