Jquery Pagination的使用技巧

做页面,常会为分页的元素犯愁。虽然功能蛮简单,但是在细节上,要自己一点点从头做,还是挺麻烦的。比如第一页的时候,前一页的Link非活性等等。

许多开发工具其实自带了相应的模板,比如Asp.net。如果是完全自己做的页面,其实也有现成好用的,这就是Jquery Pagination.

之前几个系统,我用的都是它,非常的方便。

最近一个管理系统,教一个同学也用它来做,发现一个问题,在弹出的窗口(没有菜单和地址栏)并且是IE的情况下,点击Pagination的Link会报JS错:pageLoading();未定义。

不是弹出窗口,用得好好的,为什么Modal窗口就有问题呢。虽然没有详细查,我想pageLoading多半是浏览器载入的命令,在有地址栏(即使是隐藏了)的情形下,可以行得通,但是没有地址栏的那种就会报错啦。

如何破解呢。

原来我使用了pagination的callback方法:

function pageselectCallback(page_id, jq){
pageLoading();
}

而这个callback方法在有些画面局部刷新的时候特别有效。不过我其实不要这么复杂的功能,我要的就是一个普通的link,画面全面刷新,我一点都不在意。

终于在js的原始程序里发现了不掉用onclick的方法。我的修改如下

function drawLinks() {
panel.empty();
var interval = getInterval();
var np = numPages();
// This helper function returns a handler function that calls pageSelected with the right page_id
var getClickHandler = function(page_id) {
return function(evt){ return pageSelected(page_id,evt); }
}
// Helper function for generating a single link (or a span tag if it'S the current page)
var appendItem = function(page_id, appendopts){
page_id = page_id appendopts = jQuery.extend({text:page_id+1, classes:""}, appendopts||{});
if(page_id == current_page){
var lnk = $(""+(appendopts.text)+"");
}
else
{
var lnk = $(""+(appendopts.text)+"")
//.bind("click", getClickHandler(page_id)) -- 把这个注释掉,就返回到普通的href的link
//.attr('href', opts.link_to.replace(/__id__/,page_id)); --这个我自己改的,因为它的page_id从0开始,我用起来不习惯
.attr('href', opts.link_to.replace(/page_index/,page_id+1));

}
if(appendopts.classes){lnk.addClass(appendopts.classes);}
panel.append(lnk);
}

这个也解释了之前很疑惑的现象,就是画面刷新较慢的时候,我按了第三页,结果还没等页面刷新,pagination就已经高显第三页了,总觉得画蛇添足的。现在知道了,是自己没有深刻理解呢。