javascript帮助;暂停autorefresh

时间:2015-02-01 06:08:13

标签: javascript ajax scroll refresh

试图找到一种方法来保持我的聊天div区域不会刷新和烦人地滚动到底部。在搜索了我能想到的唯一解决方案之后,将全局设置为某个值并在onfocus时更改它并返回onblur。

javascript从来都不是我最强的领域,我认为它可能只是我。

var chatarea = document.getElementById('usertalk');

window.onload=  function() {
    chatarea.scrollTop = chatarea.scrollHeight;
}

var chatfocus = false;


chatarea.onfocus=function(){ chatfocus = true; }

chatarea.onblur=function(){ chatfocus = false; }

setInterval("updateChat()", 5000);

function updateChat(){
    var ajaxRequest;
    ajaxRequest = new XMLHttpRequest();
    ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                if(chatfocus === false){ 
                    chatarea.innerHTML = ajaxRequest.responseText;
                    chatarea.scrollTop = chatarea.scrollHeight; 
                }
            }
    }
        ajaxRequest.open("GET", "comments.php?t=<?php echo $topicc; ?>", true);
        ajaxRequest.send(null);
}

如果javascript会给我打印错误,我可能会想出来或搜索到足以理解。我已尝试了许多不同的变体并将其分配给窗口,但仍然脚本不想工作。我终于放弃了,继续使用php,我现在可以调用一个编辑表单来替换我想要自动刷新的同一个div中的注释,并且还需要暂停这个脚本。但是再一次不知道在没有提问的情况下实现js。

2 个答案:

答案 0 :(得分:0)

&#34; usertalk&#34;在执行时不存在,因此附加事件处理程序失败。将事件处理程序放在onload函数中:

var chatarea = null;
window.onload=  function() {
    chatarea = document.getElementById('usertalk');
    chatarea.scrollTop = chatarea.scrollHeight;
    chatarea.onfocus=function(){ chatfocus = true; }
    chatarea.onblur=function(){ chatfocus = false; }
}

编辑:没有意识到您还在updateChat中引用了chatarea,将此外部onload的范围定义为null,但仅在页面加载后使用getElementById。

答案 1 :(得分:0)

我显然不能在div区域进行onfocus或onblur事件?

在尝试了所有可能的方法来使这些事件发挥作用并改变一个值后,我不知道如何设置为全局而不猜测直到成功,我做了一个输入按钮来启用/禁用我的自动updateChat函数并设置值在我隐藏的HTML格式中。

我也找到了像jshint.com这样有用的网站来诊断可能的错误。抱歉没有意识到