2009-07-26 84 views
7

我有一個div這樣:維護後網頁提交(ASP.NET)的股利滾動位置

<div style="overflow-y: scroll; height: 260px"> 

我包含了幾百個記錄,並讓我選擇一個項目來填充它下面的FormView控件。

問題是當頁面回發時,滾動條的位置會回到div的頂部。我想嘗試並保持其位置,以便所選記錄仍可見。

任何想法?

回答

7

地方是這樣的:

<asp:HiddenField id="hdnScrollPos" runat="server"/> in your aspx. 

然後,一些JavaScript這樣的:

var hdnScroll = document.getElementById(<%=hdnScrollPos.ClientID%>); 
var bigDiv = document.getElementById('bigDiv'); 
bigDiv.onscroll = function() { 
    hdnScroll.value = bigDiv.scrollTop; 
} 

window.onload = function() { 
    bigDiv.scrollTop = hdnScroll.value; 
} 
1

免責聲明 - 不是我的代碼,但我已經看到了這個使用前:

window.onload = function(){ 
    var strCook = document.cookie; 
    if(strCook.indexOf("!~")!=0){ 
     var intS = strCook.indexOf("!~"); 
     var intE = strCook.indexOf("~!"); 
     var strPos = strCook.substring(intS+2,intE); 

     document.getElementById("divTest").scrollTop = strPos; 
     document.getElementById("divTest").scrollTop = strPos; 
    } 
    } 
    function SetDivPosition(){ 
    var intY = document.getElementById("divTest").scrollTop; 

    document.cookie = "yPos=!~" + intY + "~!"; 
    } 

的想法是滾動條的位置存儲在cookie中。另一個(更好的?)選項將存儲在一個隱藏的字段(或字段)中。希望讓你去...

+0

我測試過但不工作 – telebog 2011-03-18 09:19:53

0

ASP.NET有這個內置的所有你需要做的是在你的頁面指令中包含MaintainScrollPositionOnPostback。

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %> 
+0

我懷疑這是否適用於嵌入式div,只是一般的主頁。 – FlySwat 2009-07-26 13:52:03

+0

是的,我不確定這將適用於頁面中包含的DIV。雖然我沒有嘗試過。 – 2009-07-26 13:52:53

0

更換thebodydocument.getElementById("divTest")

如果您擔心onscroll事件不工作,歌劇/ ff,你可以嘗試改變

thebody.onscroll=SaveScrollLocation; 

setInterval('SaveScrollLocation()", 500); 
3

下面是使用JQuery這工作對我來說FlySwat的解決方案的更細化的方式:

var $ScrollPosition = $('#hfScrollPosition'); 
    var $ScrollingDiv = $('#pnlGroupDataContent'); 
    if ($ScrollPosition.length && $ScrollingDiv.length) { 
     // Store scrolling value 
     $ScrollingDiv.scroll(function() { 
      $ScrollPosition.val($ScrollingDiv.scrollTop()); 
     }); 
     // Set scrolling 
     $ScrollingDiv.scrollTop($ScrollPosition.val()); 
    }