2016-03-15 71 views
3

我想创建一个非常简单的聊天系统,自动刷新并刷新用户提交的新聊天消息。Javascript调用函数在函数不工作

我现在有两个功能 - 一个用于提交新的消息,清除表单并刷新聊天(使用下一个函数)叫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秒,但。但是我希望用户的新消息能够立即显示出来。

我无法弄清楚为什么clearchat()函数中的refreshchat()函数没有被调用。

任何帮助,将不胜感激。谢谢。

UPDATE:

我已经添加console_log("refrehsed")refreshchat()功能,它被添加到日志中,每次均通过击球手动,也进入自动刷新,但仅股利居然就自动刷新更新。

+0

如果从程序中删除自动3秒刷新,会发生什么情况?它是否正确刷新(当然,只有当你提交消息时)? – Katana314

+0

问题是,ajax并没有立即完成,如果你想让用户发送的消息立即弹出,你可能必须手动修改聊天框的html内容以包含消息,以便它看起来像它已经出来即刻。 – chris97ong

+0

@ Katana314 - 嗯..当我删除自动3秒的时间间隔,它会自动加载信息约75%的时间,但不是每一次。 – Jetteh22

回答

2

当您将表单提交给iframe时,您应等待帖子完成后再更新UI。您可以通过监听表单所定位的iframe的加载事件来知道表单已完成提交。

+0

这工作完美。为调用'refreshchat()'函数的iframe加载添加了一个事件监听器。现在一切正常。 – Jetteh22