jqgrid.pager.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /***
  2. * 2018年7月26日 09:19:56
  3. * 基于jqGrid 4.4.3
  4. */
  5. (function ($) {
  6. $.fn.extend({
  7. //自动美化方法(应用方法:$.jqGrid({}). autoFlatter() 需要配合css文件才能显示样式,主要实现隔行变色-自适应宽度-底栏自定义功能,可以单独调用后面的方法)
  8. autoFlatter: function () {
  9. return this.each(function () {
  10. var $this = $(this);
  11. var $container = $this.parents(".ui-jqgrid-bdiv").first().parents('.ui-jqgrid').first().parents("div").first();
  12. $this.setGridWidth($container.width());
  13. var $pagerdiv = $this.parents(".ui-jqgrid-view").first().nextAll(".ui-jqgrid-pager").first();
  14. $pagerdiv.css({height: 40}).find(".ui-pager-control").remove();
  15. var divout = 'pagerout' + $pagerdiv[0].id;
  16. var divin = 'pagerin' + $pagerdiv[0].id;
  17. var prev_pager_div = 'prev_pager_div' + $pagerdiv[0].id;
  18. var first_pager_div = 'first_pager_div' + $pagerdiv[0].id;
  19. var mid1_pager_div = 'mid1_pager_div' + $pagerdiv[0].id;
  20. var current_pager_div = 'current_pager_div' + $pagerdiv[0].id;
  21. var mid2_pager_div = 'mid2_pager_div' + $pagerdiv[0].id;
  22. var last_pager_div = 'last_pager_div' + $pagerdiv[0].id;
  23. var next_pager_div = 'next_pager_div' + $pagerdiv[0].id;
  24. var select_pager_div = 'prev_pager_div' + $pagerdiv[0].id;
  25. var select_pager = 'select_pager' + $pagerdiv[0].id;
  26. if ($("#" + divout).size() === 0) {
  27. $pagerdiv.prepend('<div id="' + divout + '" style="width:100%;height:40px;float:right;"><div id="' + divin + '" style="margin:auto;text-align:center;"></div></div>').find("#" + divin).append(
  28. '<div id="' + prev_pager_div + '" class="ui-but-page pager_stable" >上一页</div>' +
  29. '<div id="' + first_pager_div + '" class="pager_in" style="display: none">1</div>' +
  30. '<div id="' + mid1_pager_div + '" class="pager_omit" style="display: none">...</div>' +
  31. '<div id="' + current_pager_div + '" class="pager_in current_pager">1</div>' +
  32. '<div id="' + mid2_pager_div + '" class="pager_omit" style="display: none">...</div>' +
  33. '<div id="' + last_pager_div + '" class="pager_in" style="display: none">ERR</div>' +
  34. '<div id="' + next_pager_div + '" class="ui-but-page pager_stable" >下一页</div>' +
  35. '<div id="' + select_pager_div + '" class="pager_select">第 <select id="' + select_pager + '" class="select_pager"><option value="1">1</option></select> 页</div>');
  36. }
  37. //region 调整模板和添加翻页栏 在ajax请求成功即执行
  38. $this.unbind('ajaxSuccess').ajaxSuccess(function () {
  39. $this.autoWidth().disColour().newpager();
  40. });
  41. //endregion
  42. });
  43. },
  44. disColour: function () {
  45. return this.each(function () { //这里的this 就是 jQuery对象。这里return 为了支持链式调用
  46. var $this = $(this); //获取当前dom 的 jQuery对象,这里的this是当前循环的dom
  47. var ids = $this.getDataIDs();
  48. for (var i = 0; i < ids.length; i++) {
  49. var rowid = ids[i];
  50. if (rowid % 2 === 0) {
  51. $this.find('#' + rowid).addClass("rowClassODD");
  52. } else {
  53. $this.find('#' + rowid).addClass("rowClassEVEN");
  54. }
  55. }
  56. });
  57. },
  58. autoWidth: function () {
  59. return this.each(function () { //这里的this 就是 jQuery对象。这里return 为了支持链式调用
  60. var $this = $(this); //获取当前dom 的 jQuery对象,这里的this是当前循环的dom.removeClass("pager_stable")
  61. var $ui_jqgrid_bdiv = $this.parents(".ui-jqgrid-bdiv").first();
  62. if ($this.css("height") <= $ui_jqgrid_bdiv.css("height")) {
  63. $this.css("width", $ui_jqgrid_bdiv.css("width"));
  64. $this.parents(".ui-jqgrid-bdiv").first().prevAll(".ui-jqgrid-hdiv").first().find(".ui-jqgrid-htable").first().css("width", $ui_jqgrid_bdiv.css("width"));
  65. $ui_jqgrid_bdiv.css('overflow-y', 'hidden');//强制不显示滚动条 不然在差不多高度时会跳啊跳的 烦死了
  66. } else {
  67. $this.setGridWidth($ui_jqgrid_bdiv.width());
  68. $ui_jqgrid_bdiv.css('overflow-y', 'auto');//强制不显示滚动条 不然在差不多高度时会跳啊跳的 烦死了
  69. }
  70. });
  71. },
  72. newpager: function () {
  73. return this.each(function () { //这里的this 就是 jQuery对象 支持链式调用
  74. var $this = $(this);//获取jquery对象
  75. //查找并定义页面所需标签内容
  76. var totalrecords = $this.getGridParam('records');//获取当前页数
  77. alert('totalrecords ' + totalrecords);
  78. var current_pager = $this.getGridParam('page');//获取当前页数
  79. var total_pager = Math.max($this.getGridParam('total'), 1);//获取最大页数
  80. //通过table找到所对应的pager的div 如果有
  81. var $pagerdiv = $this.parents(".ui-jqgrid-view").first().nextAll(".ui-jqgrid-pager").first();
  82. $pagerdiv.css({
  83. height: 40
  84. }).find(".ui-pager-control").remove();//让原来的div隐藏掉
  85. //定义各个元素的id名称 避免冲突 选择和页面内的pager组合
  86. var divout = 'pagerout' + $pagerdiv[0].id;
  87. var divin = 'pagerin' + $pagerdiv[0].id;
  88. var prev_pager_div = 'prev_pager_div' + $pagerdiv[0].id;
  89. var first_pager_div = 'first_pager_div' + $pagerdiv[0].id;
  90. var mid1_pager_div = 'mid1_pager_div' + $pagerdiv[0].id;
  91. var current_pager_div = 'current_pager_div' + $pagerdiv[0].id;
  92. var mid2_pager_div = 'mid2_pager_div' + $pagerdiv[0].id;
  93. var last_pager_div = 'last_pager_div' + $pagerdiv[0].id;
  94. var next_pager_div = 'next_pager_div' + $pagerdiv[0].id;
  95. var select_pager_div = 'prev_pager_div' + $pagerdiv[0].id;
  96. var select_pager = 'select_pager' + $pagerdiv[0].id;
  97. if ($("#" + divout).size() === 0) {//如果原来页面没有这个元素就插入,如果有就不执行插入操作 只进行后面的添加内容和设置内容操作
  98. $pagerdiv.prepend('<div id="' + divout + '" style="width:100%;height:40px;float:right;"><div id="' + divin + '" style="margin:auto;text-align:center;"></div></div>').find("#" + divin).append(
  99. '<div id="' + prev_pager_div + '" class="ui-but-page pager_stable" >上一页</div>' +
  100. '<div id="' + first_pager_div + '" class="pager_in" style="display: none">1</div>' +
  101. '<div id="' + mid1_pager_div + '" class="pager_omit" style="display: none">...</div>' +
  102. '<div id="' + current_pager_div + '" class="pager_in current_pager">1</div>' +
  103. '<div id="' + mid2_pager_div + '" class="pager_omit" style="display: none">...</div>' +
  104. '<div id="' + last_pager_div + '" class="pager_in" style="display: none">ERR</div>' +
  105. '<div id="' + next_pager_div + '" class="ui-but-page pager_stable" >下一页</div>' +
  106. '<div id="' + select_pager_div + '" class="pager_select">第 <select id="' + select_pager + '" class="select_pager"><option value="1">1</option></select> 页</div>');
  107. }
  108. //获取div容器 避免重复查找
  109. var $prev_pager_div = $("#" + prev_pager_div), $first_pager_div = $("#" + first_pager_div),
  110. $mid1_pager_div = $("#" + mid1_pager_div), $current_pager_div = $("#" + current_pager_div),
  111. $mid2_pager_div = $("#" + mid2_pager_div), $last_pager_div = $("#" + last_pager_div),
  112. $next_pager_div = $("#" + next_pager_div), $select_pager_div = $("#" + select_pager_div),
  113. $select_pager = $("#" + select_pager);
  114. // //给容器加上内容
  115. $current_pager_div.html(current_pager);
  116. $last_pager_div.html(total_pager);
  117. //控制是否显示尾页和中间的省略部分
  118. if (total_pager === current_pager) {
  119. $mid2_pager_div.css("display", "none");
  120. $last_pager_div.css("display", "none").addClass("pager_stable").removeClass("pager_click");
  121. $next_pager_div.addClass("pager_stable").removeClass("pager_click");
  122. } else if (total_pager - 1 === current_pager) {
  123. $mid2_pager_div.css("display", "none");
  124. $last_pager_div.css("display", "").removeClass("pager_stable").addClass("pager_click");
  125. $next_pager_div.removeClass("pager_stable").addClass("pager_click");
  126. } else if (total_pager <= 1) {
  127. $mid2_pager_div.css("display", "none");
  128. $last_pager_div.css("display", "none").addClass("pager_stable").removeClass("pager_click");
  129. $mid1_pager_div.css("display", "none");
  130. $first_pager_div.css("display", "none").addClass("pager_stable").removeClass("pager_click");
  131. $next_pager_div.addClass("pager_stable").removeClass("pager_click");
  132. } else {
  133. $mid2_pager_div.css("display", "");
  134. $last_pager_div.css("display", "").removeClass("pager_stable").addClass("pager_click");
  135. $next_pager_div.removeClass("pager_stable").addClass("pager_click")
  136. }
  137. //控制是否显示首页和中间的省略部分
  138. if (1 === current_pager) {
  139. $mid1_pager_div.css("display", "none");
  140. $first_pager_div.css("display", "none").addClass("pager_stable").removeClass("pager_click");
  141. $prev_pager_div.addClass("pager_stable").removeClass("pager_click");
  142. } else if (2 === current_pager) {
  143. $mid1_pager_div.css("display", "none");
  144. $first_pager_div.css("display", "").removeClass("pager_stable").addClass("pager_click");
  145. $prev_pager_div.removeClass("pager_stable").addClass("pager_click");
  146. } else {
  147. $mid1_pager_div.css("display", "");
  148. $first_pager_div.css("display", "").removeClass("pager_stable").addClass("pager_click");
  149. $prev_pager_div.removeClass("pager_stable").addClass("pager_click");
  150. }
  151. //取消点击事件 一定要有
  152. $pagerdiv.find(".pager_stable").unbind("click");
  153. //添加点击事件
  154. $pagerdiv.find(".pager_click").each(function () {
  155. var selquery = false;
  156. var _page = 1;
  157. if (this.id === last_pager_div) {
  158. _page = total_pager;
  159. selquery = true;
  160. }
  161. if (this.id === next_pager_div) {
  162. _page = current_pager + 1;
  163. selquery = true;
  164. }
  165. if (this.id === prev_pager_div) {
  166. _page = current_pager - 1;
  167. selquery = true;
  168. }
  169. if (this.id === first_pager_div) {
  170. _page = 1;
  171. selquery = true;
  172. }
  173. if (selquery) {
  174. $(this).unbind("click").click(function () {
  175. $this.trigger("reloadGrid", [{page: _page}]);
  176. });
  177. }
  178. });
  179. $select_pager.empty().each(function () {
  180. for (var i = 1; i <= total_pager; i++) {
  181. this.add(new Option(i, i));
  182. }
  183. $(this).val(current_pager).unbind("change").change(function () {
  184. $this.trigger("reloadGrid", [{page: $(this).val()}]);
  185. });
  186. });
  187. });
  188. }
  189. });
  190. })(window.jQuery);