2013-01-10 3 views
1

트리 뷰가있는 사용자 정의 컨트롤이 있습니다. 사용자가 노드를 확장 할 때마다 업데이트 패널을 사용하여 노드가 다시로드됩니다. 사용자가 다시로드 할 때마다 treeview를 스크롤하지 못하게하려면 현재 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> 

이는 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 
} 

문제는이 실 거예요 작업 난이 "경고()"를에 추가하지 않는 것입니다 자바 스크립트는 다음과 같이 :

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