做页面,常会为分页的元素犯愁。虽然功能蛮简单,但是在细节上,要自己一点点从头做,还是挺麻烦的。比如第一页的时候,前一页的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就已经高显第三页了,总觉得画蛇添足的。现在知道了,是自己没有深刻理解呢。