2014-04-23 196 views
0

我最近将JQuery的simplePagination.js集成到了我的html中,很高兴。一切工作....除了它的浏览器历史的一部分。当点击分页中的页码时,我可以看到浏览器的网址栏变化,以跟踪用户所在的页面。不幸的是,我注意到当点击浏览器上的“返回”时,网址会变回到上一页,但是网站的内容和分页号不会改回。即1 2 3 4 5接下来是分页按钮...如果我按顺序点击它们,并且当前在4上。如果我在浏览器上单击“返回”,突出显示的按钮仍然是4,因此与4.它没有变回3.唯一变回3的是url。JQuery simplePagination.js浏览器历史记录

我本来得到了我的代码工作(几乎)与此计算器张贴>>>How to use SimplePagination jquery

在此发布,用户2unco,提出了一些代码,然后纳入工作它的一个例子。

为了方便起见,我将包括我的例子中提到那里所有代码: (无法弄清楚如何置HTML代码,而不会被转换为实际内容):要进行分页

HTML内容。 ..请参阅这篇文章的HTML代码示例。 How to use SimplePagination jquery 建议的JavaScript添加到HTML:

jQuery(function($) { 
    // consider adding an id to your table, 
    // just incase a second table ever enters the picture..? 
    var items = $("table tbody tr"); 

    var numItems = items.length; 
    var perPage = 2; 

    // only show the first 2 (or "first per_page") items initially 
    items.slice(perPage).hide(); 

    // now setup your pagination 
    // you need that .pagination-page div before/after your table 
    $(".pagination-page").pagination({ 
     items: numItems, 
     itemsOnPage: perPage, 
     cssStyle: "light-theme", 
     onPageClick: function(pageNumber) { // this is where the magic happens 
      // someone changed page, lets hide/show trs appropriately 
      var showFrom = perPage * (pageNumber - 1); 
      var showTo = showFrom + perPage; 

      items.hide() // first hide everything, then show for the new page 
       .slice(showFrom, showTo).show(); 
     } 
    }); 
}); 

而且simplePagination.js

(function($){ 

    var methods = { 
     init: function(options) { 
      var o = $.extend({ 
       items: 1, 
       itemsOnPage: 1, 
       pages: 0, 
       displayedPages: 5, 
       edges: 2, 
       currentPage: 0, 
       hrefTextPrefix: '#page-', 
       hrefTextSuffix: '', 
       prevText: 'Prev', 
       nextText: 'Next', 
       ellipseText: '…', 
       cssStyle: 'light-theme', 
       labelMap: [], 
       selectOnClick: true, 
       nextAtFront: false, 
       invertPageOrder: false, 
       onPageClick: function(pageNumber, event) { 
        // Callback triggered when a page is clicked 
        // Page number is given as an optional parameter 
       }, 
       onInit: function() { 
        // Callback triggered immediately after initialization 
       } 
      }, options || {}); 

      var self = this; 

      o.pages = o.pages ? o.pages : Math.ceil(o.items/o.itemsOnPage) ? Math.ceil(o.items/o.itemsOnPage) : 1; 
      if (o.currentPage) 
       o.currentPage = o.currentPage - 1; 
      else 
       o.currentPage = !o.invertPageOrder ? 0 : o.pages - 1; 
      o.halfDisplayed = o.displayedPages/2; 

      this.each(function() { 
       self.addClass(o.cssStyle + ' simple-pagination').data('pagination', o); 
       methods._draw.call(self); 
      }); 

      o.onInit(); 

      return this; 
     }, 

     selectPage: function(page) { 
      methods._selectPage.call(this, page - 1); 
      return this; 
     }, 

     prevPage: function() { 
      var o = this.data('pagination'); 
      if (!o.invertPageOrder) { 
       if (o.currentPage > 0) { 
        methods._selectPage.call(this, o.currentPage - 1); 
       } 
      } else { 
       if (o.currentPage < o.pages - 1) { 
        methods._selectPage.call(this, o.currentPage + 1); 
       } 
      } 
      return this; 
     }, 

     nextPage: function() { 
      var o = this.data('pagination'); 
      if (!o.invertPageOrder) { 
       if (o.currentPage < o.pages - 1) { 
        methods._selectPage.call(this, o.currentPage + 1); 
       } 
      } else { 
       if (o.currentPage > 0) { 
        methods._selectPage.call(this, o.currentPage - 1); 
       } 
      } 
      return this; 
     }, 

     getPagesCount: function() { 
      return this.data('pagination').pages; 
     }, 

     getCurrentPage: function() { 
      return this.data('pagination').currentPage + 1; 
     }, 

     destroy: function(){ 
      this.empty(); 
      return this; 
     }, 

     drawPage: function (page) { 
      var o = this.data('pagination'); 
      o.currentPage = page - 1; 
      this.data('pagination', o); 
      methods._draw.call(this); 
      return this; 
     }, 

     redraw: function(){ 
      methods._draw.call(this); 
      return this; 
     }, 

     disable: function(){ 
      var o = this.data('pagination'); 
      o.disabled = true; 
      this.data('pagination', o); 
      methods._draw.call(this); 
      return this; 
     }, 

     enable: function(){ 
      var o = this.data('pagination'); 
      o.disabled = false; 
      this.data('pagination', o); 
      methods._draw.call(this); 
      return this; 
     }, 

     updateItems: function (newItems) { 
      var o = this.data('pagination'); 
      o.items = newItems; 
      o.pages = methods._getPages(o); 
      this.data('pagination', o); 
      methods._draw.call(this); 
     }, 

     updateItemsOnPage: function (itemsOnPage) { 
      var o = this.data('pagination'); 
      o.itemsOnPage = itemsOnPage; 
      o.pages = methods._getPages(o); 
      this.data('pagination', o); 
      methods._selectPage.call(this, 0); 
      return this; 
     }, 

     _draw: function() { 
      var o = this.data('pagination'), 
       interval = methods._getInterval(o), 
       i, 
       tagName; 

      methods.destroy.call(this); 

      tagName = (typeof this.prop === 'function') ? this.prop('tagName') : this.attr('tagName'); 

      var $panel = tagName === 'UL' ? this : $('<ul></ul>').appendTo(this); 

      // Generate Prev link 
      if (o.prevText) { 
       methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage - 1 : o.currentPage + 1, {text: o.prevText, classes: 'prev'}); 
      } 

      // Generate Next link (if option set for at front) 
      if (o.nextText && o.nextAtFront) { 
       methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'}); 
      } 

      // Generate start edges 
      if (!o.invertPageOrder) { 
       if (interval.start > 0 && o.edges > 0) { 
        var end = Math.min(o.edges, interval.start); 
        for (i = 0; i < end; i++) { 
         methods._appendItem.call(this, i); 
        } 
        if (o.edges < interval.start && (interval.start - o.edges != 1)) { 
         $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 
        } else if (interval.start - o.edges == 1) { 
         methods._appendItem.call(this, o.edges); 
        } 
       } 
      } else { 
       if (interval.end < o.pages && o.edges > 0) { 
        var begin = Math.max(o.pages - o.edges, interval.end); 
        for (i = o.pages - 1; i >= begin; i--) { 
         methods._appendItem.call(this, i); 
        } 
        if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) { 
         $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 
        } else if (o.pages - o.edges - interval.end == 1) { 
         methods._appendItem.call(this, interval.end); 
        } 
       } 
      } 

      // Generate interval links 
      if (!o.invertPageOrder) { 
       for (i = interval.start; i < interval.end; i++) { 
        methods._appendItem.call(this, i); 
       } 
      } else { 
       for (i = interval.end - 1; i >= interval.start; i--) { 
        methods._appendItem.call(this, i); 
       } 
      } 

      // Generate end edges 
      if (!o.invertPageOrder) { 
       if (interval.end < o.pages && o.edges > 0) { 
        if (o.pages - o.edges > interval.end && (o.pages - o.edges - interval.end != 1)) { 
         $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 
        } else if (o.pages - o.edges - interval.end == 1) { 
         methods._appendItem.call(this, interval.end); 
        } 
        var begin = Math.max(o.pages - o.edges, interval.end); 
        for (i = begin; i < o.pages; i++) { 
         methods._appendItem.call(this, i); 
        } 
       } 
      } else { 
       if (interval.start > 0 && o.edges > 0) { 
        if (o.edges < interval.start && (interval.start - o.edges != 1)) { 
         $panel.append('<li class="disabled"><span class="ellipse">' + o.ellipseText + '</span></li>'); 
        } else if (interval.start - o.edges == 1) { 
         methods._appendItem.call(this, o.edges); 
        } 
        var end = Math.min(o.edges, interval.start); 
        for (i = end - 1; i >= 0; i--) { 
         methods._appendItem.call(this, i); 
        } 
       } 
      } 

      // Generate Next link (unless option is set for at front) 
      if (o.nextText && !o.nextAtFront) { 
       methods._appendItem.call(this, !o.invertPageOrder ? o.currentPage + 1 : o.currentPage - 1, {text: o.nextText, classes: 'next'}); 
      } 
     }, 

     _getPages: function(o) { 
      var pages = Math.ceil(o.items/o.itemsOnPage); 
      return pages || 1; 
     }, 

     _getInterval: function(o) { 
      return { 
       start: Math.ceil(o.currentPage > o.halfDisplayed ? Math.max(Math.min(o.currentPage - o.halfDisplayed, (o.pages - o.displayedPages)), 0) : 0), 
       end: Math.ceil(o.currentPage > o.halfDisplayed ? Math.min(o.currentPage + o.halfDisplayed, o.pages) : Math.min(o.displayedPages, o.pages)) 
      }; 
     }, 

     _appendItem: function(pageIndex, opts) { 
      var self = this, options, $link, o = self.data('pagination'), $linkWrapper = $('<li></li>'), $ul = self.find('ul'); 

      pageIndex = pageIndex < 0 ? 0 : (pageIndex < o.pages ? pageIndex : o.pages - 1); 

      options = { 
       text: pageIndex + 1, 
       classes: '' 
      }; 

      if (o.labelMap.length && o.labelMap[pageIndex]) { 
       options.text = o.labelMap[pageIndex]; 
      } 

      options = $.extend(options, opts || {}); 

      if (pageIndex == o.currentPage || o.disabled) { 
       if (o.disabled) { 
        $linkWrapper.addClass('disabled'); 
       } else { 
        $linkWrapper.addClass('active'); 
       } 
       $link = $('<span class="current">' + (options.text) + '</span>'); 
      } else { 
       $link = $('<a href="' + o.hrefTextPrefix + (pageIndex + 1) + o.hrefTextSuffix + '" class="page-link">' + (options.text) + '</a>'); 
       $link.click(function(event){ 
        return methods._selectPage.call(self, pageIndex, event); 
       }); 
      } 

      if (options.classes) { 
       $link.addClass(options.classes); 
      } 

      $linkWrapper.append($link); 

      if ($ul.length) { 
       $ul.append($linkWrapper); 
      } else { 
       self.append($linkWrapper); 
      } 
     }, 

     _selectPage: function(pageIndex, event) { 
      var o = this.data('pagination'); 
      o.currentPage = pageIndex; 
      if (o.selectOnClick) { 
       methods._draw.call(this); 
      } 
      return o.onPageClick(pageIndex + 1, event); 
     } 

    }; 

    $.fn.pagination = function(method) { 

     // Method calling logic 
     if (methods[method] && method.charAt(0) != '_') { 
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof method === 'object' || !method) { 
      return methods.init.apply(this, arguments); 
     } else { 
      $.error('Method ' + method + ' does not exist on jQuery.pagination'); 
     } 

    }; 

})(jQuery); 

它的 “工作” 的例子是此链接:http://bilalakil.me/bin/simplepagination/

如果你尝试一下,你会看到我的问题。点击页面1,然后点击2,然后点击3.后退按钮。网址会发生变化,但页面上的内容和突出显示的分页按钮将保持不变。

这怎么解决?需要修复它,以便在浏览器上按下后退按钮时,内容实际上会更改,而不仅仅是url字符串。

P.S.我已经在Firefox和Chrome中尝试了这一点。所以我不认为它是一个浏览器问题。

+0

如果你明白它是如何工作的,返回按钮肯定不会工作。分页仅仅是基于点击页码来显示和隐藏列表中的记录。 1)您可以侦听后退按钮单击并触发prevPage()或执行页面刷新。 。 。 2)每次触发nextPage()或prevPage()写入页面编号的cookie时,在分页的init中读取此cookie以相应显示 – Jianhong

回答

0

我所看到的,现在你的当前页面被设置为0.这就是为什么选定的页面没有突出显示,虽然内容已更新。你可以试试这个 -

var currentPage = $(".pagination-page").pagination().getCurrentPage();  
$(".pagination-page").pagination({ 
    items: numItems, 
    itemsOnPage: perPage, 
    cssStyle: "light-theme", 
    currentPage: currentPage, 
    onPageClick: function(pageNumber) { // this is where the magic happens 
     // someone changed page, lets hide/show trs appropriately 
     var showFrom = perPage * (pageNumber - 1); 
     var showTo = showFrom + perPage; 

     items.hide() // first hide everything, then show for the new page 
      .slice(showFrom, showTo).show(); 
    } 
});