Javascript 如何保持滚动位置独立于回发?

Javascript 如何保持滚动位置独立于回发?,javascript,asp.net,scroll,Javascript,Asp.net,Scroll,我在javascript中有一个固定的时间间隔事件,它单击asp按钮。该应用程序是一个普通的聊天室,我必须刷新gridview(位于面板内)以检查是否有新的聊天。但每次单击按钮并刷新gridview时,面板都会向上滚动到顶部(即scrollTop值变为0)。我尝试过这个方法,但没有效果:- <script type="text/javascript"> function refresh() { setInterval(function () {

我在javascript中有一个固定的时间间隔事件,它单击asp按钮。该应用程序是一个普通的聊天室,我必须刷新gridview(位于面板内)以检查是否有新的聊天。但每次单击按钮并刷新gridview时,面板都会向上滚动到顶部(即scrollTop值变为0)。我尝试过这个方法,但没有效果:-

    <script type="text/javascript">
    function refresh() {
        setInterval(function () {
            var xtop = document.getElementById("Panel1").scrollTop;
            document.getElementById("Button2").click();
            document.getElementById("Panel1").scrollTop = xtop;
        }, 1000);
    }
    </script>

函数刷新(){
setInterval(函数(){
var xtop=document.getElementById(“Panel1”).scrollTop;
document.getElementById(“按钮2”)。单击();
document.getElementById(“Panel1”).scrollTop=xtop;
}, 1000);
}

如果要在回发之间存储滚动位置,可以在
refresh()
函数中使用JavaScript将滚动位置值存储在HTML中的隐藏字段中:

document.getElementById("scroll").value = document.getElementById("Panel1").scrollTop;
还有其他选项可以持久化数据,如cookies和ASP.NET ViewState,但隐藏字段最简单。然后,您可以在加载DOM时从隐藏字段中读取该值,并将窗口滚动到该位置

然而,如果你每秒钟都发回一次来检查新消息,你可能会遇到更大的问题。这种功能最好使用AJAX异步完成。这需要进行一些研究,因为我不确定您在这里的实现,但实际上您将使用JavaScript询问服务器是否有新消息,并从服务器异步加载它们,从而消除回发的使用