Reputation: 2788
I have a div as such:
<div style="overflow-y: scroll; height: 260px">
I contains a few hundred records and allows me to select an item to populate a formview control below it.
The problem is that when the page posts-back, the scroller position goes back to the top of the div. I want to try and maintain its position so that the selected record is still visible.
Any ideas?
Upvotes: 10
Views: 29254
Reputation: 370
<asp:HiddenField ID="hfScroll" runat="server" ClientIDMode="Static" />
<script>
$(document).ready(function () {
ScrollMaintain();
$(window).scroll(function () {
$('#hfScroll').val($(window).scrollTop());
});
function ScrollMaintain() {
var scroll = $('#hfScroll').val();
scroll = (scroll == '' ? '0' : scroll);
$(window).scrollTop(scroll);
}
</script>
Upvotes: 0
Reputation: 1339
Tried all of the above and none of them worked satisfactorily in chrome v39, however the method used on this page worked marvellously:
Maintain Scroll Position of DIV on PostBack in ASP.Net
Upvotes: 1
Reputation: 175733
Place something like:
<asp:HiddenField id="hdnScrollPos" runat="server"/> in your aspx.
Then, some javascript like:
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;
}
Upvotes: 12
Reputation: 5633
Replace thebody
with document.getElementById("divTest")
If you worry that the onscroll event does not work in opera/ff, you can try changing
thebody.onscroll=SaveScrollLocation;
to
setInterval('SaveScrollLocation()", 500);
Upvotes: 1
Reputation: 41
Here is a more refined way of FlySwat's solution using JQuery which worked for me:
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());
}
Upvotes: 3
Reputation:
ASP.NET has this built in all you need to do is include the MaintainScrollPositionOnPostback in your page directive.
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %>
Upvotes: 1
Reputation: 25359
Disclaimer - not my code, but I've seen this used before:
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 + "~!";
}
The idea is to store the position of the scrollbar in a cookie. Another (better?) option would be to store it in a hidden field (or fields). Hope that gets you going...
Upvotes: 1