jQuery .load回调/滚动/ CSS溢出

我正在开发一个非常简单的基于jQuery的聊天室(用于介绍性研讨会)。 当前聊天显示在设置为400px高和自动溢出的div中。

jQuery的“load”函数用于从数据库中检索HTML格式的聊天并将它们放入div中。

我有一些非常简单的代码,可以确保聊天div始终滚动到底部。 此代码位于名为scrollToBottom的函数中,该函数使用load函数中的完成回调function调用:

load语句位于一个名为getChat的函数中,该函数在页面准备就绪时调用,然后每秒调用一次。 这是相关的代码块:

$(function() { getChat(); setInterval("getChat();", 1000); }); function getChat() { $("#chatDiv").load("chat_server.php?get_chats=true", scrollToBottom() ); } function scrollToBottom() { var chatHeight = document.getElementById("chatDiv").scrollHeight; $("#chatDiv").scrollTop( chatHeight ); } 

问题:第一次调用getChat时,div不会滚动到底部。 在后续调用中(通过setInterval),滚动工作正常。

以下是我目前所知道的事情:

回调是第一次被调用,但是当我提醒scrollHeight时,它第一次是“400”而后续时间是“441”(即当内容大于div大小时应该是什么)。

441高内容的scrollTop值400应该滚动到底部,但是当我在scrollToBottom中输入硬值400时,问题仍然存在。 这让我觉得问题与CSS /滚动而不是加载回调有关。

聊天div开始为空,但将其更改为包含单个或单个字母并未解决问题。 使用足够的硬编码内容开始div需要滚动DID来解决问题。

在这个阶段,似乎滚动条需要可见/活动才能使scrollTop工作……但是没有解释为什么它不能在第一次工作 – 因为回调是在内容发生之后发生的已加载(因此滚动条应可见/活动)…

只是为了使它更奇怪,如果回调函数是匿名内联函数,它工作正常…

 $(function() { getChat(); setInterval("getChat();", 1000); }); function getChat() { $("#chatDiv").load("chat_server.php?get_chats=true", function() { var chatHeight = document.getElementById("chatDiv").scrollHeight; $("#chatDiv").scrollTop( chatHeight ); } ); } 

这个版本第一次以及随后的所有时间都运行良好……

任何人都可以对这种情况有所了解吗? 谢谢,格雷格

在javascript中,函数(匿名或非匿名)是第一类,这意味着它们可以作为参数传递。 您不需要使用匿名表单,也不需要第一次调用该函数。 只需将scrollToBottom作为参数加载即可:

 $("#chatDiv").load("chat_server.php?get_chats=true", scrollToBottom); 

同样,您可以简化setInterval调用:

 setInterval(getChat, 1000);