1

ツリービューを含むユーザーコントロールがあります。ユーザーがノードを展開するたびに、更新パネルを使用してノードが再ロードされます。ユーザーがリロードするたびにツリービューをスクロールする必要がないように、現在のdivのscrollTop値をキャプチャしてテキストボックスに保存し、ポストバック後にその値を取得してリロードします。1つの奇妙な動作を除いてすべてが機能します。これは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 に答える