【问题标题】:window.onload doesnt run the assigned (scroll) functionwindow.onload 不运行分配的(滚动)功能
【发布时间】:2015-01-28 20:05:40
【问题描述】:

我正在用原生 Javascript 和 AJAX(所以没有 jQuery)构建一个 AJAX 聊天系统。消息通过 AJAX 加载并放入使用 overflow-y: scroll; 的 div 中,因此您可以滚动浏览所有消息。

因为最新消息出现在底部,所以我有一个滚动到 div 末尾的 scrollDown() 函数:

function scrollDown()
{
    var objDiv = document.getElementById("chatbox");
}

问题是这个功能不起作用。如果我这样做window.onload = function() { scrollDown(); };,我也尝试过window.onload = scrollDown,但这也不起作用。

我确定 scrollDown() 函数没有问题,因为我还使用该函数在出现新消息时自动向下滚动,然后效果很好。

这是我的完整源代码:

getBerichten();

function getHTTPObject(){
   if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
   else if (window.XMLHttpRequest) return new XMLHttpRequest();
   else {
      alert("Your browser does not support AJAX.");
      return null;
   }
}   

function doWork(id, user_id) {    
    nieuwbericht = getHTTPObject();
    if (nieuwbericht != null) {

        if( document.getElementById('bericht').value != "")
        {

        nieuwbericht.open("GET", "ajaxberichten.php?id=" + id + "&user_id=" + user_id + "&bericht="
                        + document.getElementById('bericht').value, true);

        nieuwbericht.send(null); 
        document.getElementById("bericht").value = "";
        }
    }
}

function setOutput()
{
    if(httpObject.readyState == 4)
    {
        document.getElementById('berichten').innerHTML = httpObject.responseText;
            //scrollDown();
            setInterval(getBerichten(),1000);
    }
}

function getBerichten()
{
    httpObject = getHTTPObject();

    if (httpObject != null) 
    {
        httpObject.open("GET", "ajaxgetberichten.php?id=<?php echo $_GET['id'] ?>", true);

        httpObject.send(null);
        httpObject.onreadystatechange = setOutput;
    }
}

function scrollDown()
{
    var objDiv = document.getElementById("chatbox");
    objDiv.scrollTop = objDiv.scrollHeight;
}

window.onload = function() { scrollDown(); };

我的html页面:

<div class="postbox">

    <div class="post">

        <div class="chatbox" id="chatbox">
            <div id="berichten"></div>
        </div>

        <form method="post" action="">
            <textarea name="bericht" id="bericht"rows="20" cols="85"> </textarea>
            <input name="verstuur" type="button" onclick="doWork(<?php echo $_GET["id"] ?>, <?php echo $user_id ?>);" value="Verstuur"/>
        </form>  

    </div>
</div> 

【问题讨论】:

    标签: javascript ajax scroll chat


    【解决方案1】:

    尝试使用 document.ready() 而不是 window.onload(),因为你的 DOM 可能在窗口事件上没有准备好

    【讨论】:

    • 感谢您的快速回复,我仍然有同样的问题。这很有趣,因为当我在新选项卡中打开页面时它可以工作。如果我加载页面然后使用 F5 重新加载它就不再工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多