2013-01-03 33 views
0
function pagination() {  
$('.paginated').each(function() { 
    var currentPage = 0; 
    var numPerPage = $("#instancesPerPage").val(); 
    var $table = $(this); 
    $table.bind('repaginate', function() { 
     $table.find('tbody tr').hide().slice(currentPage * numPerPage, (currentPage + 1) * numPerPage).show(); 
    }); 
    $table.trigger('repaginate'); 
    var numRows = $table.find('tbody tr').length; 
    var numPages = Math.ceil(numRows/numPerPage); 
    var $pager = $('<ul></ul>'); 

    for (var page = 0; page < numPages; page++) { 
    var pageUrl = '<a href="#">' + page + '</a>'; 
     $('<li></li>').html(pageUrl).on('click', { 
      newPage: page 
     }, function(event) { 
      currentPage = event.data['newPage']; 
      $table.trigger('repaginate'); 
      $(this).addClass('active').siblings().removeClass('active'); 
     }).appendTo($pager);  
    } 
    $pager.appendTo('#pager'); 
    $("ul li:first-child").addClass('active'); 
}); 
}; 

如果我的表有8行,我numPerPage.value是2以上功能將產生如下:選擇時表分頁 - 李的不正確附加

<div class="pagination-instances pagination-small pagination-right" id="pager"> 
    <ul></ul> 
    <ul> 
     <li class="active"><a href="#">0</a></li> 
     <li><a href="#">1</a></li> 
     <li><a href="#">2</a></li> 
     <li><a href="#">3</a></li> 
    </ul> 
</div> 

在調用下列功能另一個numPerPage.value:

$('#instancesPerPage').on("change", function() { 
    pagination(); 
}); 

我的表頁面更改爲正確的numPerPage.value但李的不正確更新,成爲一個爛攤子。

<div class="pagination-instances pagination-small pagination-right" id="pager"> 
    <ul></ul> 
    <ul> 
     <li class="active"><a href="#">0</a></li> 
     <li><a href="#">1</a></li> 
     <li><a href="#">2</a></li> 
     <li><a href="#">3</a></li> 
    </ul> 
    <ul> 
     <li class="active"><a href="#">0</a></li> 
     <li><a href="#">1</a></li> 
    </ul> 
    <ul> 
     <li class="active"><a href="#">0</a></li> 
     <li><a href="#">1</a></li> 
    </ul> 
</div> 

顯然這與我正在使用的appendTo有些關係,但我不知道如何糾正這種情況。我也不知道爲什麼有一個空的<ul></ul>

+0

你可以隨時進行調試 – akonsu

+0

@akonsu肯定的是,我們是不是在宜家,所以我不指望一個預製的回答,你能指出我正確的方向壽? – Tristan

+0

我會檢查循環退出後$ pager變量的值以及#pager元素的內容。如果你使用chrome,那麼你可以使用console.log API在瀏覽器的控制檯中顯示內容。 – akonsu

回答

1

多次調用分頁()將無法正常工作,因爲您不是解除綁定事件,而是添加到<div id="pager">而不是替換內容。此外,如果您有多個分頁表格,他們都會嘗試將ul添加到相同的<div id="pager">。通過爲表中的尋呼機指定目標div,可以使用多個分頁表和多個尋呼機。

<select id="instancesPerPage"> 
    <option value="2">2</option> 
    <option value="5">5</option> 
    <option value="8">8</option> 
    <option value="100">100</option> 
    <option value="999999999">All</option> 
</select> Instances per page 

<table data-provide="pagination" data-pager="#pager"> 
    <tr><td>Row 1</td></tr> 
    <tr><td>Row 2</td></tr> 
    <tr><td>Row 3</td></tr> 
    <tr><td>Row 4</td></tr> 
    <tr><td>Row 5</td></tr> 
    <tr><td>Row 6</td></tr> 
    <tr><td>Row 7</td></tr> 
    <tr><td>Row 8</td></tr> 
</table> 

<div class="pagination pagination-small" id="pager"></div> 

<table data-provide="pagination" data-pager="#pager2"> 
    <tr><td>ABC 1</td></tr> 
    <tr><td>ABC 2</td></tr> 
    <tr><td>ABC 3</td></tr> 
    <tr><td>ABC 4</td></tr> 
    <tr><td>ABC 5</td></tr> 
    <tr><td>ABC 6</td></tr> 
    <tr><td>ABC 7</td></tr> 
    <tr><td>ABC 8</td></tr> 
</table> 

<div class="pagination pagination-small" id="pager2"></div> 
​ 

使用JS

function pagination() { 
$('table[data-provide=pagination]').each(function() { 
    var $table = $(this); 
    var $pager = $('<ul></ul>'); 

    var currentPage = 0; 
    var numPerPage = $("#instancesPerPage").val(); 
    var numRows = $table.find('tbody tr').length; 
    var numPages = Math.ceil(numRows/numPerPage); 

    $table.unbind('repaginate'); 

    $table.bind('repaginate', function() { 
     $table.find('tbody tr').hide().slice(currentPage * numPerPage, (currentPage + 1) * numPerPage).show(); 
    }); 

    for (var page = 0; page < numPages; page++) { 
     var link = '<a href="#">' + page + '</a>'; 

     $('<li></li>').html(link).on('click', { newPage: page}, function(event) { 
      currentPage = event.data['newPage']; 
      $table.trigger('repaginate'); 
      $(this).addClass('active').siblings().removeClass('active'); 
     }).appendTo($pager);  
    } 

    $pager.find("li:first-child").addClass('active'); 

    $($table.data('pager')).html($pager); 
    $table.trigger('repaginate'); 
}); 
}; 

pagination(); 

$('#instancesPerPage').on("change", function() { 
pagination(); 
}); 
​ 

http://jsfiddle.net/gZmWh/10/

+0

我只在該頁上有一個表。但我想它會在觸發重新分頁時添加到同一個分區,如果numPerPage已更改。在上面的評論中你提到了「有點奇怪的代碼」。那麼你會改變什麼? – Tristan

+0

我會改變的大部分東西都在這裏。最重要的是不要在循環遍歷每個表時使用(全局)ID作爲元素。此外,我不明白爲什麼你會有一個頁面大小的輸入,而不是它的數據屬性。 –

+0

用於頁尺寸的輸入是選擇每頁的項目,如: '<選擇ID = 「instancesPerPage」> \t \t \t \t \t \t \t \t \t <選項值= 「10」> 10 \t \t \t \t \t \t \t \t \t <選項值= 「25」> 25 \t \t \t \t \t \t \t \t \t <選項值= 「50」> 50 \t \t \t \t \t \t \t \t \t <選項值= 「100」> 100 \t \t \t \t \t \t \t \t \t <選項值= 「999999999」>全部 \t \t \t \t個\t \t \t \t \t實例每page' – Tristan