我正在尝试创建一个非常简单的聊天系统,自动刷新并刷新用户提交的新聊天消息。
我目前有两个功能 - 一个用于提交新消息,清除表单并刷新聊天(使用下一个功能),名为clearchat()
:
function clearchat() {
var frm = document.getElementById('chatform');
document.getElementById('fullmessage').value = document.getElementById('chatmsg').value;
frm.submit(); // form is being submitted to a hidden iframe.
frm.reset();
refreshchat();
}
然后另一个刷新应该在clearchat()
运行时调用的聊天,并且还使用间隔每3秒调用一次:
function refreshchat() {
$('#qcwindow').load(document.URL + ' #qctext');
$('#chatwindow').load(document.URL + ' #chattext');
var chatwindow = document.getElementById('chatwindow');
var difference = chatwindow.scrollHeight - chatwindow.scrollTop;
if(difference < 750) {
chatwindow.scrollTop = chatwindow.scrollHeight;
}
}
此功能将新的聊天信息加载到DIV中,然后将其保持滚动到div的底部,除非用户已手动滚动离开div的底部。
这两个功能都是单独的。我遇到的问题是,当用户提交新消息时,它 提交表单并清除表单,但它不刷新聊天。但是,聊天仍会每3秒自动刷新一次。但我希望用户的新消息能够立即显示出来。
我无法弄清楚为什么refreshchat()
函数中的clearchat()
函数没有被调用。
任何帮助将不胜感激。感谢。
更新:
我已将console_log("refrehsed")
添加到refreshchat()
函数中,并且每次通过手动点击输入以及自动刷新都会将其添加到日志中,但div仅在自动刷新时实际更新。
答案 0 :(得分:2)
当您将表单提交给iframe时,您应该在更新UI之前等待帖子完成。您可以通过收听表单所针对的iframe的加载事件来知道表单已完成提交。