2012-01-14 38 views
0
function Pager(tableName, itemsPerPage) { 
    this.tableName = tableName; 
    this.itemsPerPage = itemsPerPage; 
    this.currentPage = 1; 
    this.pages = 0; 
    this.inited = false; 

    this.showRecords = function(from, to) {   
     var rows = document.getElementById(tableName).rows; 
     // i starts from 1 to skip table header row 
     for (var i = 1; i < rows.length; i++) { 
     if (i < from || i > to) 
      rows[i].style.display = 'none'; 
     else 
      rows[i].style.display = ''; 
    } 
} 

this.showPage = function(pageNumber) { 
    if (! this.inited) { 
     alert("not inited"); 
     return; 
    } 

    var oldPageAnchor = document.getElementById('pg'+this.currentPage); 
    oldPageAnchor.className = 'pg-normal'; 

    this.currentPage = pageNumber; 
    var newPageAnchor = document.getElementById('pg'+this.currentPage); 
    newPageAnchor.className = 'pg-selected'; 

    var from = (pageNumber - 1) * itemsPerPage + 1; 
    var to = from + itemsPerPage - 1; 
    this.showRecords(from, to); 
} 

this.prev = function() { 
    if (this.currentPage > 1) 
     this.showPage(this.currentPage - 1); 
} 

this.next = function() { 
    if (this.currentPage < this.pages) { 
     this.showPage(this.currentPage + 1); 
    } 
}       

this.init = function() { 
    var rows = document.getElementById(tableName).rows; 
    var records = (rows.length - 1); 
    this.pages = Math.ceil(records/itemsPerPage); 
    this.inited = true; 
} 

this.showPageNav = function(pagerName, positionId) { 
    if (! this.inited) { 
     alert("not inited"); 
      return; 
     } 
     var element = document.getElementById(positionId); 

     var pagerHtml = '<a id="myshow" onmousemove="one()" onclick="' + pagerName + '.prev();" class="pg-normal pgnleft"> &#171 Prev </a> '; 
     for (var page = 1; page <= this.pages; page++) 
      pagerHtml += '<span id="pg' + page + '" class="pg-normal" onclick="' + pagerName + '.showPage(' + page + ');">' + page + '</span> '; 
     pagerHtml += '<span onclick="'+pagerName+'.next();" class="pg-normal pgnright"> Next &#187;</span>';    

     element.innerHTML = pagerHtml; 
    } 
} 

我正在使用它作爲頁面上的分頁腳本我正在嘗試。在一個頁面中的多個分頁腳本

<script type="text/javascript"><!-- 
    var pager = new Pager('results', 2); 
    pager.init(); 
    pager.showPageNav('pager', 'pageNavPosition'); 
    pager.showPage(2); 
//--></script> 

我在一個頁面有5個表使用第一個腳本,所以我試着把腳本放在每個表的末尾。當我這樣做時,分頁顯示並起作用,但是pg選擇不起作用。有什麼我做錯了嗎?我也這樣做:

<script type="text/javascript"><!-- 
    var pager2 = new Pager('results2', 2); 
    pager2.init(); 
    pager2.showPageNav('pager2', 'pageNavPosition2'); 
    pager2.showPage(2); 
//--></script> 

在每個表的末尾,我只是替換表名(results2 results3 results4 ...)。它看起來錯了。有沒有人能解釋我做錯了什麼?

+1

問題是您的腳本使用** ID **生成元素。 ID應該是唯一的。當腳本調用document.getElementById('pg'+ this.currentPage);'時,它將獲得具有此ID的DOM中的第一個元素,而不是在邏輯上屬於分頁實例的元素。改用類。 – 2012-01-14 10:21:54

+0

@FelixKling。非常感謝!我花了一個小時才弄明白事情,但是這讓我走向了正確的道路。我錯了ID。再次感謝! – Adrengski 2012-01-14 11:35:23

回答

0

問題是您的腳本生成帶有ID的元素。 ID應該是唯一的。當腳本調用document.getElementById('pg'+this.currentPage);時,它將使用此ID獲取DOM中的第一個元素,而不是在邏輯上屬於分頁實例的元素。改用類。