2016-03-15 12 views
3

Я пытаюсь создать очень простую чат-систему с автоматическим обновлением и обновлением при представлении нового сообщения чата от пользователя.Javascript Calling Function In Function Not Working

Я в настоящее время есть две функции - одна для подачи нового сообщения, очищая форму и обновления чата (с помощью следующей функции) называется 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() не вызывается.

Любая помощь будет оценена по достоинству. Благодарю.

UPDATE:

Я добавил console_log("refrehsed") функции refreshchat() и добавляется в журнал каждый раз, как через ударять ввести вручную, а также автоматическое обновление, но на самом деле ДИВ только обновляет на автоматическое обновление.

+0

Что произойдет, если вы удалите автоматическое 3-секундное обновление из программы? Правильно ли он обновляется (конечно, только когда вы отправляете сообщение)? – Katana314

+0

Дело в том, что ajax не выполняется мгновенно, если вы хотите, чтобы сообщение, посланное от пользователя, появилось мгновенно, вам, вероятно, придется вручную изменить содержимое html в окне чата, чтобы включить сообщение, чтобы оно выглядело так, как будто оно отсутствует мгновенно. – chris97ong

+0

@ Katana314 - Хм .. Когда я удаляю автоматический 3-секундный интервал, он автоматически загружает информацию примерно в 75% случаев, но не каждый раз. – Jetteh22

ответ

2

Когда вы отправляете форму в iframe, вам следует дождаться окончания сообщения перед обновлением пользовательского интерфейса. Вы можете знать, что форма завершила отправку, прослушивая событие загрузки iframe, на которое нацелена форма.

+0

Это сработало отлично. Добавлен прослушиватель событий для загрузки iframe, который вызвал функцию 'refreshchat()'. Теперь все работает правильно. – Jetteh22