1

我有一个用户控件,其中有一个树视图。每次用户展开一个节点时,它都会使用更新面板重新加载。为了防止用户每次重新加载时都必须滚动树视图,我想捕获当前 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 函数,位于母版页中:

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
}

谁能解释为什么会这样以及如何补救?我显然不能在那里发出警报。

谢谢杰森

4

1 回答 1

0

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

于 2013-01-10T18:06:39.823 回答