我有像这样的简单数据网格:
<div class="uiGridContent">
<table>
<tbody id="page-1">
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
</tr>
</tbody>
</table>
</div>
* 请注意,我在 uiGridContent div 上方和下方的 div 中的单独表格中有页眉和页脚。对于本示例,这不是必需的。
var nextPage = 1, lastScrollTop = 0, st;
$('.uiGridContent').scroll(function(){
var st = $(this).scrollTop();
// We're scrolling down
if (st > lastScrollTop){
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent')[0].scrollHeight && nextPage < 10) {
$.ajax({
url: '<?php echo $appurl; ?>?page=' + nextPage,
success: function(data) {
nextPage = nextPage + 1;
var content = $(data).find('.uiGrid tbody').html();
$('.uiGridContent tbody').last().after('<tbody id="page-'+nextPage+'">'+content+'</tbody>');
},
error: function(data) {
alert(data);
}
});
}
lastScrollTop = st;
// We're scrolling up
} else {
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() ) {
var pageToRemove = $('.uiGridContent tbody').last();
if( pageToRemove.attr('id') != 'page-1') {
pageToRemove.remove(); nextPage = nextPage - 1;
} else {
$('.uiGridContent').scrollTo(0,0);
}
}
lastScrollTop = st;
}
});
这个想法是当用户向下滚动表格时,当他们到达 gridcontent div 中最后一个 tbody 的底部时,它将在下一页加载。哪个工作正常!
问题在于向上滚动。计划是这样,当用户向上滚动到最后一个 tbody 时,它会再次将其删除,直到他们最终只剩下一个 tbody (在这种情况下是原始的)。实际发生的情况是,一旦他们开始向上滚动,它就会删除除第一个之外的所有内容,或者有时会错过向上滚动并将用户带到顶部而不删除所有其他 tbody。
有任何想法吗?我认为问题在于 if 语句:
if( $('.uiGridContent').scrollTop() + $('.uiGridContent').innerHeight() >= $('.uiGridContent tbody').last().height() ) {
在向上滚动部分下。