设置div滚动条位置

时间:2013-01-10 17:50:59

标签: javascript asp.net asp.net-ajax ajaxcontroltoolkit

我有一个包含树视图的用户控件。每次用户展开节点时,都会使用更新面板重新加载。为了防止用户每次重新加载时都必须滚动浏览树视图,我想捕获当前div的scrollTop值,将其保存到文本框中,然后在回发后,获取该值并重新加载。一切都有效,除了一个奇怪的行为。这是div:

<div ID="treePanel" runat="server"  class="treePanel"  onscroll="setScroll(this.scrollTop)" onunload="testScroll()" >
<asp:TextBox ID="scrollTb" runat="server" Text="" ></asp:TextBox>
<asp:TreeView ID="TreeView1" runat="server"  
OnTreeNodeExpanded="Node_Expand" CollapseImageToolTip="Click To Collapse" ExpandImageToolTip="Click To Expand">                     
</asp:TreeView> 
</div>

这是javascript函数,在masterpage中:

function setScroll(getVal){               
var getTb = document.getElementById("ctl00_ContentPlaceHolder1_rmsStepThree1_scrollTb")            
getTb.value= getVal
}

function testScroll(){
var getTb = document.getElementById("ctl00_ContentPlaceHolder1_rmsStepThree1_scrollTb")         
var getDiv = document.getElementById("ctl00_ContentPlaceHolder1_rmsStepThree1_treePanel")         
getDiv.scrollTop= getTb.value
}

问题是,除非我在javascript中添加“Alert()”,否则这不会起作用,如下所示:

function testScroll(){
var getTb = document.getElementById("ctl00_ContentPlaceHolder1_rmsStepThree1_scrollTb")         
var getDiv = document.getElementById("ctl00_ContentPlaceHolder1_rmsStepThree1_treePanel")  
alert('some text')       
getDiv.scrollTop= getTb.value
}

任何人都可以解释为什么这样做以及如何解决这个问题?我显然不能在那里发出警报。

感谢 杰森

1 个答案:

答案 0 :(得分:0)

警报修复代码通常意味着竞争条件到位。您在div完全呈现之前调用代码。警报允许它完全呈现。不应该在加载新内容后设置滚动位置,而不是在卸载新内容时设置滚动位置吗?