//1. 用自调用匿名函数包裹代码,可以避免跟其他人的代码变量冲突 //2. 将系统变量以变量形式传递到插件内部,window等系统变量在插件内部就有了一个局部的引用,可以提高访问速度,会有些许性能的提升 //2.1 为了得到没有被修改的undefined,我们并没有传递这个参数,但却在接收时接收了它,因为实际并没有传,所以‘undefined’那个位置接收到的就是真实的'undefined' //3. 在代码开头加一个分号,这在任何时候都是一个好的习惯 ; var pageHelper = (function ($, window, document, undefined) { //默认参数 var defaults = { /***** 查询用参数 *****/ pageIndex: 1, //第几页 pageSize: 10, //每页显示数量 type: "GET", //请求方式 pageDiv: "", //显示分页控件的容器ID /***** ajax参数 *****/ url: "", data: {}, async: true, dataType: "json", bind: function(data){ }, completed: function () { }, }; //其他全局参数 var pageCount = 1; var opt = new Object(); //var setOptions = function (data) { // opt = $.extend(opt, data || {}); //}; var Init = function (options) { //将默认参数与自定义参数合并 opt[options.pageDiv] = {}; opt[options.pageDiv] = $.extend({}, defaults, options || {}); //调用goPage方法 goPage(options.pageDiv, options.pageIndex); }; var goPage = function (pageDiv, pageIndex) { //不存在时,设为1 if (!pageIndex) pageIndex = 1; //设置参数 opt[pageDiv].pageIndex = pageIndex; var dataObj = {}; dataObj["PageIndex"] = opt[pageDiv].pageIndex; dataObj["PageSize"] = opt[pageDiv].pageSize; dataObj["rId"] = Math.random(); var ajaxData = $.extend({}, dataObj, opt[pageDiv].data || {}); //循环参数,并把html标签转义 for (var o in ajaxData) { if (typeof (ajaxData[o]) == "string") { if (/((<[^>]+>)|(<[^>]+)|([^>]+>))/g.test(ajaxData[o])) { ajaxData[o] = htmlEncode(ajaxData[o]); } } } //ajax访问后台 $.ajax({ url: opt[pageDiv].url, type: opt[pageDiv].type, async: opt[pageDiv].async, dataType: opt[pageDiv].dataType, data: ajaxData, //成功,绑定数据 success: function (data) { if (data != null && data != "") { if (typeof (opt[pageDiv].bind) == "function") { opt[pageDiv].bind(data); } //分页拼接 var page = $(opt[pageDiv].pageDiv); pageCount = data.TotalPages; page.html(""); var count = 1; //统计用 var show_page_num = 5; //中间显示5格页码 if (data.PageIndex == 1) { $('上一页').appendTo(page); $('1').appendTo(page); } else { //上一页 $('上一页').unbind("click").bind("click", function () { if (data.HasPreviousPage) { goPage(pageDiv, data.PageIndex - 1); } return; }).appendTo(page); //第一页 $('1').unbind("click").bind("click", function () { goPage(pageDiv, 1); return; }).appendTo(page); //$(":checkbox").attr("checked", false); } //省略号后,过2个页数框 if (count < data.PageIndex - 3 && pageCount > (show_page_num + 2)) { $(page).append('...'); count = data.PageIndex - 3; } if (pageCount > (show_page_num + 1) && count > (pageCount - show_page_num - 1)) { count = pageCount - show_page_num - 1; } for (var i = 0; i < 5; i++) { count++; if (count < pageCount) { if (data.PageIndex == count) { $('' + count + '').appendTo(page); } else { $('' + count + '').bind('click', { pageIndex: count }, function (event) { goPage(pageDiv, event.data.pageIndex); return; }).appendTo(page); } } } if (count + 1 < pageCount) { $(page).append('...'); } if (pageCount > 1) { if (data.PageIndex == pageCount && pageCount != 1) { //最后一页 $('' + pageCount + '').appendTo(page); } else { //最后一页 $('' + pageCount + '').bind('click', function () { goPage(pageDiv, data.TotalPages); return; }).appendTo(page); } } if (data.PageIndex == pageCount) { //下一页 $('下一页').appendTo(page); } else { //下一页 $('下一页').bind('click', function () { if (data.HasNextPage) { goPage(pageDiv, data.PageIndex + 1); } return; }).appendTo(page); //$(":checkbox").attr("checked", false); } $('').appendTo(page); ////跳转 //page.append("到"); //$('').appendTo(page); //page.append("页"); //$('').bind('click', function (event) { // var pi = parseInt($("#txt_goPageIndex").val()); // if (!pi || pi <= 0 || !/^\d+$/.test(pi)) { // goPage(data.PageIndex); // //$("#txt_goPageIndex").val(data.PageIndex); // return false; // } // if (pi < 1 || pi > pageCount) { // //alert('页码在' + (s + 1) + '到' + (e + 1) + '之间'); // goPage(data.PageIndex); // return false; // } // goPage(pi); //}).appendTo(page); //$(":checkbox").attr("checked", false); } }, //失败,提示 error: function (XMLHttpRequest, textStatus, errorThrown) { alert("textStatus:" + textStatus + ",errorThrown:" + errorThrown); }, //完成,调用自定义方法 complete: function(){ opt[pageDiv].completed() } }); }; return { //setOptions: setOptions, Init: Init, goPage: goPage }; })(jQuery, window, document);