2013-07-10 55 views
3

标题解释了我的问题。 因此,这里是我的代码:Jquery .scrollTop()不起作用

$("#my-div ul").scrollTop($("#my-div ul")[0].scrollHeight); 

#我-DIV使用AJAX得到填补。所以在我的Ajax请求,我已经有了一个成功的回调执行上面的代码:

$.ajax({ 
    url: 'getLog.php', 
    data: {'logFile': 'log.php'}, // echo "<ul> A BUNCH OF <li>s here </ul>" 
    success: function(data){ 
     $("#my-div").html(data); 
     // console.log($("#my-div ul")[0].scrollHeight); // Debugging Purposes 
     $("#my-div ul").scrollTop($("#my-div ul")[0].scrollHeight); 
    } 
}); 

我继续和控制台登录$(“#我-DIV UL”)[0] .scrollHeight(正如你可以看到在代码中)看它是否知道scrollHeight之前执行.scrollTop()它的工作(它显示720然后我增加了日志文件的大小,然后我刷新,它显示830)

令人惊讶的是,当我转到控制台(Chrome),并输入

$("#my-div ul").scrollTop($("#my-div ul")[0].scrollHeight); 

它完美的工作,和th一直滚动到底部!

我想不通为什么它不工作,虽然... :(

回答

5

浏览器不重新渲染所有内容时,HTML改变时,总有一个小gap.If没有差距JavaScript执行会阻止浏览器,用户可以不使用你的页面(如预期)< - 这可能是原因:)

你可以试试:

$.ajax({ 
url: 'getLog.php', 
data: {'logFile': 'log.php'}, // echo "<ul> A BUNCH OF <li>s here </ul>" 
success: function(data){ 
    $("#my-div").html(data); 
    // console.log($("#my-div ul")[0].scrollHeight); // Debugging Purposes 
    setTimeout(function() { 
     $("#my-div ul").scrollTop($("#my-div ul")[0].scrollHeight); 
    }, 10); 
} 
}); 

如果是这样的问题你也可以尝试将setTimeout内的时间降低到0--它不会0,但每个浏览器设置的最短时间。

+0

嘿,对不起,我不明白你的解释,但我用setTimeout,它工作得很完美。然后我把它减少到0,仍然完美!谢谢! :d –