2013-01-10 125 views
1

我有一个树形视图的用户控件。每次用户扩展节点时,都会使用更新面板重新加载。为了防止用户在每次重新加载时都必须滚动浏览treeview,我想捕获当前div的scrollTop值,将其保存到文本框中,然后在回发后获取该值并重新加载它。除了一个奇怪的行为,一切都有效这是div:设置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函数,这是在母版:

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的,就像这样:

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 
} 

任何人都可以解释为什么这是这种行为方式,以及如何补救呢?我显然不能在那里发出警报。

感谢 杰森

回答

0

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

+0

听起来不错。是的,我只是不知道在哪里致电更新。该页面本身没有被回发,只有用户控件被刷新。 – jason