pagination.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. /*分页插件*/
  2. var Pagination = {
  3. showPageCount: 7,
  4. init: function (obj, callback,topFlag) {
  5. this.bindListener(obj, callback,topFlag);
  6. },
  7. createHtml: function (pageIndex, recordCount, pageSize) {
  8. var pageCount = Math.ceil(recordCount / pageSize); //总页数
  9. var showPageCount = this.showPageCount;
  10. var MaxCount = 10000000000;
  11. var HalfPageCount = (showPageCount + 1) / 2;
  12. var html = [];
  13. if (pageCount > MaxCount) {
  14. pageCount = MaxCount;
  15. }
  16. if (pageIndex > pageCount - 1) {
  17. pageIndex = pageCount - 1;
  18. }
  19. html.push("<span class=\"total\">共" + recordCount + "条</span>");
  20. if (pageIndex > 0) {
  21. html.push("<span class=\"previous\"><a href=\"javascript:;\" page= " + (pageIndex - 1) + " data-rec=\"上一页\"></a></span>");
  22. }
  23. else {
  24. html.push("<span class=\"disable previous\"></span>");
  25. }
  26. if (pageCount <= showPageCount) {
  27. for (var i = 0; i < pageCount; i++) {
  28. if (pageIndex == i) {
  29. html.push("<span class=\"current num\">" + (i + 1) + "</span>");
  30. }
  31. else {
  32. html.push("<span class=\"num\"><a href=\"javascript:;\" page=" + i + ">" + (i + 1) + "</a></span>");
  33. }
  34. }
  35. }
  36. else if (pageIndex < HalfPageCount) {
  37. for (var i = 0; i < showPageCount - 1; i++) {
  38. if (pageIndex == i) {
  39. html.push("<span class=\"current num\">" + (i + 1) + "</span>");
  40. }
  41. else {
  42. html.push("<span class=\"num\"><a href=\"javascript:;\" page=" + i + ">" + (i + 1) + "</a></span>");
  43. }
  44. }
  45. html.push("<span class=\"dots\">...</span>");
  46. html.push("<span class=\"num\"><a href=\"javascript:;\" page=" + (pageCount - 1) + ">" + pageCount + "</a></span>");
  47. }
  48. else if (pageIndex >= pageCount - HalfPageCount - 1) {
  49. html.push("<span class=\"num\"><a href=\"javascript:;\" page='0'>" + 1 + "</a></span>");
  50. html.push("<span class=\"dots\">...</span>");
  51. for (var i = pageCount - showPageCount + 1; i < pageCount; i++) {
  52. if (pageIndex == i) {
  53. html.push("<span class=\"current num\">" + (i + 1) + "</span>");
  54. }
  55. else {
  56. html.push("<span class=\"num\"><a href=\"javascript:;\" page=" + i + ">" + (i + 1) + "</a></span>");
  57. }
  58. }
  59. }
  60. else {
  61. html.push("<span class=\"num\"><a href=\"javascript:;\" page=0>" + 1 + "</a></span>");
  62. html.push("<span class=\"dots\">...</span>");
  63. for (var i = pageIndex - HalfPageCount / 2; i <= pageIndex + HalfPageCount / 2; i++) {
  64. if (pageIndex == i) {
  65. html.push("<span class=\"current num\">" + (i + 1) + "</span>");
  66. }
  67. else {
  68. html.push("<span class=\"num\"><a href=\"javascript:;\" page=" + i + ">" + (i + 1) + "</a></span>");
  69. }
  70. }
  71. html.push("<span class=\"dots\">...</span>");
  72. html.push("<span class=\"num\"><a href=\"javascript:;\" page =" + (pageCount - 1) + ">" + pageCount + "</a></span>");
  73. }
  74. if (pageIndex < pageCount - 1) {
  75. html.push("<span class=\"next\"><a href=\"javascript:;\" page=" + (pageIndex + 1) + " data-rec=\"下一页\"></a></span>");
  76. }
  77. else {
  78. html.push("<span class=\"disable next\"></span>");
  79. }
  80. // html.push("<span class=\"total\">每页" + pageSize + "条</span>");
  81. html.push("<span class=\"total total_page\">共" + pageCount + "页</span>");
  82. html.push("<span class=\"page_jump\">到</span><input id='pageInput' class='pageInput' oldpage='' maxlength='" + pageCount + "' type='text' ><span class=\"page_jump\">页</span><button type='button' id='pagebtn' class='pagebtn'>确定</button>");
  83. // html.push("<script>pagination(" + pageCount + ",$('#pageInput'), $('#pagebtn'));</script>");
  84. return html.join("");
  85. },
  86. bindListener: function (obj, callback,topFlag) {
  87. var topFlag = topFlag || true;
  88. obj.on("click", "a", function () {
  89. if (typeof callback === "function") {
  90. var index = $(this).attr("page");
  91. callback(parseInt(index));
  92. }
  93. if(topFlag){
  94. $(window).scrollTop(0);
  95. }
  96. return false;
  97. });
  98. obj.on("click", "button", function () {
  99. var pageInput = obj.find('input');
  100. if (typeof callback === "function") {
  101. var index = pageInput.val();
  102. if (index == '') {
  103. pageInput.focus();
  104. return false;
  105. // index = 1;
  106. }
  107. callback(parseInt(index) - 1);
  108. }
  109. return false;
  110. });
  111. // var pageButton = $("#pageButton");
  112. obj.on("keyup", "input", function (e) {
  113. switch (e.keyCode) {
  114. case 37:
  115. break;
  116. case 38:
  117. break;
  118. case 39:
  119. break;
  120. case 40:
  121. break;
  122. case 13:
  123. changePage();
  124. break;
  125. case 8:
  126. $(e.target).attr('oldpage', $(e.target).val());
  127. break;
  128. case 46:
  129. $(e.target).attr('oldpage', $(e.target).val());
  130. break;
  131. default :
  132. validPage();
  133. }
  134. return false;
  135. });
  136. //分页
  137. function changePage() {
  138. var pageInput = obj.find('input');
  139. var page = pageInput.val();
  140. var maxPage = parseInt(obj.find(".total_page").html().substring(1));
  141. var pattern = new RegExp("^[1-9]\\d{0," + maxPage.toString().length + "}$");
  142. if (page.trim() == "") {
  143. pageInput.focus();
  144. return;
  145. }
  146. if (pattern.test(page)) {
  147. page = parseInt(page);
  148. maxPage = parseInt(maxPage);
  149. if (page > maxPage || page < 0) {
  150. pageInput.val("").focus();
  151. return;
  152. }
  153. } else {
  154. pageInput.val("").focus();
  155. return;
  156. }
  157. callback(parseInt(page) - 1);
  158. }
  159. //页码校验v2
  160. function validPage() {
  161. var pageInput = obj.find('input');
  162. var totalPageHtml = obj.find(".total_page").html();
  163. var maxPage = parseInt(totalPageHtml.substring(1, totalPageHtml.length - 1));
  164. var page = pageInput.val();
  165. var pattern = /^[0-9]+$/;
  166. var oldpage = pageInput.attr("oldpage") || '';
  167. if (page.trim() == "") {
  168. pageInput.val("");
  169. return;
  170. }
  171. if (!pattern.test(page)) {
  172. pageInput.val(oldpage);
  173. return;
  174. }
  175. var pageInt = parseInt(page);
  176. if (page.substr(0, 1) == '0') {
  177. pageInput.val(pageInt);
  178. }
  179. if (pageInt == 0) {
  180. pageInput.val('');
  181. return;
  182. }
  183. if (pageInt > parseInt(maxPage)) {
  184. pageInput.val(page.substr(0, page.length - 1));
  185. return;
  186. }
  187. pageInput.attr('oldpage', pageInput.val());
  188. }
  189. },
  190. Page: function (obj, pageIndex, recordCount, pageSize) {
  191. obj.empty();
  192. obj.html(this.createHtml(pageIndex, recordCount, pageSize));
  193. }
  194. };